javascript - 当用户删除离线数据时保留 Firefox 附加组件 localStorage

标签 javascript firefox-addon local-storage

我以这种方式在我的 Firefox 附加组件中使用 localStorage:

var ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
var scriptSecManager = Components.classes['@mozilla.org/scriptsecuritymanager;1'].getService(Components.interfaces.nsIScriptSecurityManager);
var domStorageManager = Components.classes['@mozilla.org/dom/storagemanager;1'].getService(Components.interfaces.nsIDOMStorageManager);
var uri = ioService.newURI('http://example.com/addon/', null, null);
var principal = scriptSecManager.getNoAppCodebasePrincipal ? scriptSecManager.getNoAppCodebasePrincipal(uri) : scriptSecManager.getCodebasePrincipal(uri);
var localStorage = domStorageManager.getLocalStorageForPrincipal(principal, '');

一切正常,但当用户删除“离线数据”时,存储被清除。我该如何解决?

最佳答案

使用偏好服务将数据存储在用户的个人资料中。

var prefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService),
    prefs = prefService.getBranch("extensions.YOUREXTENSIONABBREVIATIONHERE.");

var stringValue = "My Name",
    booleanValue = true,
    numberValue = 55;

prefs.setCharPref("stringParam", stringValue);
prefs.setBoolPref("booleanParam", booleanValue);
prefs.setCharPref("numberParam", ''+numberValue);

prefService.savePrefFile(null);   // only to force an immediate save

stringValue = prefs.getCharPref("stringParam");
booleanValue = prefs.getBoolPref("booleanParam");
numberValue = parseInt(prefs.getCharPref("numberParam"), 10);

将 defaults.js 文件放入您的 defaults/preferences 文件夹并为新用户初始化首选项。如果您尝试检索不存在的首选项并且无法检查它是否存在,您将收到错误消息。

看这里:

https://developer.mozilla.org/en-US/docs/Adding_preferences_to_an_extension

关于javascript - 当用户删除离线数据时保留 Firefox 附加组件 localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466488/

相关文章:

javascript - Node.js:逐行替换文本文件中模式的第二部分

Javascript 从单个下拉列表填充 2 个文本框

javascript - 在 NodeJS 中,带有 Promise 的数据库结果未正确返回

javascript - 如何跨 Chrome 实例同步 localStorage(或使用 chrome.storage.sync 而不使用已发布的扩展程序)?

javascript - 使用 localStorage 编辑一组对象

javascript - JS '+' 运算符未从 getElementById 执行数值加法

firefox - 如何允许 Firefox(或 Chrome)读取 PC 的主机名或其他可分配 ID?

google-chrome-extension - 在 ManifestV3 Service Worker 后台脚本中使用 `window` 全局变量

firefox-addon - Firefox 扩展内容脚本调用/生命周期

javascript - 为表中选定的行设置唯一 ID 以存储在 localStorage 中