0

我是扩展开发的新手。现在我正在测试使用附加 SDK 开发的 Firefox 扩展。我想使用 HTM5 localstorage 从我的扩展中的一个后台脚本中存储一些东西,这些脚本将从同一扩展的不同后台脚本中获取。npm(节点数据包管理器)已被使用,所以问题是我无法使用浏览器 localStorage 对象,ReferenceError: localStorage is not defined这就是我得到的。

通过冲浪,我开始了解 node-localstorage。我正在按照 https://www.npmjs.com/package/node-localstorage的说明进行操作。但是,当我使用上面链接中的给定代码测试我的扩展时,我收到一个错误:

Message: Module `localStorage.js` is not found at resource://gre/modules/commonjs/localStorage.js

Stack: 
module.exports@resource://xxx-at-xyz-dot-com/scripts/Somescript.js:3:23 
@resource://xxx-at-xyz-dot-com/index.js:6:11
run@resource://gre/modules/commonjs/sdk/addon/runner.js:147:19
startup/</<@resource://gre/modules/commonjs/sdk/addon/runner.js:87:9 
Handler.prototype.process@resource://gre/modules/Promise-backend.js:933:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:812:7
this.PromiseWalker.scheduleWalkerLoop/<@resource://gre/modules/Promise-backend.j s:746:1 –

这是我尝试使用 localStorage 的近似值:

//Somescript.js (background script)

module.exports = function () {
    this.watchTab = function (tabId, port, url) {
       //some code
       localStorage.setItem("key","value");
       // some code
    }
}

该行localStorage.setItem("key","value")抛出错误ReferenceError: localStorage is not defined.这是我无法使用 localStorage 的原因。

4

1 回答 1

1

在使用 Firefox Add-on SDK时,您应该强烈倾向于使用高级 API。如果这些不能满足您的要求,请查看Low-Level APIs。只有当上述方法都不能满足您的需求时,您才应该探索其他选择。这些 API 存在的原因之一是允许您编写附加组件,而不必担心随着 Firefox 的发展和变化而花费大量精力来维护您的代码。

假设您的问题确实是“如何将数据从我的附加 SDK 扩展存储到某种类型的本地存储?”,那么您至少应该考虑简单存储API,它是附加的标准部分开发工具包。

假设您使用的代码与您的问题类似,则以下内容应该有效:

//Somescript.js (background script)
var simpleStorage= require("sdk/simple-storage"); //Usable elsewhere in your code.
module.exports = function () {
    this.watchTab = function (tabId, port, url) {
        //some code
        simpleStorage.storage["key"] = "value";
        // some code
    }
}

注意:您的代码没有明确说明是否应将其视为变量或字符串文字keyvalue

请注意,如果您jpm run用于开发和测试附加组件,则需要使用特定配置文件才能使存储在多次运行中持续存在。您可以通过使用jpm的--profileand-nocopy选项来做到这一点。

于 2016-08-04T12:14:11.990 回答