相当于无需重启的firefox扩展的简单存储API



是否有一个等效的API或一种方法来调用它从一个不重新启动的扩展?我需要在浏览器会话之间存储一些字符串。

我已经发现了这一点,但对于简单的字符串存储来说似乎太复杂了。SS API是否在后台使用相同的东西?

由于同步文件I/O, simple-storage/localStorage的api很糟糕。在chrome/附加代码中可以很容易地使用IndexedDB等替代方案。

你也可以在你的附加组件中使用localStorage(不需要使用SDK simple-storage API),但不应该在覆盖中使用window.localStorage,因为这将在附加组件之间共享,并且不能在bootstrap.js和/或js代码模块中使用window.localStorage,因为根本没有window。但是你可以自己构造一个存储对象。

function getStorage(uri) {
  if (!(uri instanceof Ci.nsIURI)) {
    uri = Services.io.newURI(uri, null, null);
  }
  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"].
    getService(Ci.nsIScriptSecurityManager).
    getNoAppCodebasePrincipal(uri);
  let dsm = Cc["@mozilla.org/dom/localStorage-manager;1"].
    getService(Ci.nsIDOMStorageManager);
  return dsm.createStorage(principal, "");
}
var s1 = getStorage("chrome://my-addon/content/whatever.xul"); // does not actually have to point to a resource.

localStorage通常的限制也适用(配额等)。

顺便说一句:代码还可以让您访问localStorage的网站,例如getStorage("http://stackoverflow.com/"); .

您可以通过以下方式将任何SDK模块导入到正常的不可重启扩展中:

const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
const { require } = devtools;
let ss = require('sdk/simple-storage');

你可以使用会话存储API (nsISessionStore):

const ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
ss.setGlobalValue("my-extension-few-strings", "blah blah blah");
const fewStrings = ss.getGlobalValue("my-extension-few-strings");
// fewStrings === "blah blah blah";
ss.deleteGlobalValue("my-extension-few-strings");
会话存储在所有扩展中共享,因此为存储值选择唯一的名称(例如,在所有键名前加上扩展名)。与simple-storage和localStorage不同,它没有大小限制。

注。setGlobalValue, getGlobalValue, deleteGlobalValue没有记录在任何地方

最新更新