1

我正在尝试使用 Firefox Addon Builder 创建一个 Firefox 插件。

我无法弄清楚我如何将数据保存在“简单存储”中。

main.js

var data = require("self").data;

var ss = require("simple-storage");
if(typeof(ss.storage.bl) === 'undefined') {
  ss.storage.bl = [];
}
blacklist = ss.storage.bl;

exports.main = function(){
    var pageMod = require("page-mod");
    pageMod.PageMod({
        include: "*",
        contentScriptWhen: 'end',
        contentScriptFile: [data.url("jquery.min.js")] 
    });

    var contextmenu = require("context-menu");
    contextmenu.Item({
        label: "block",
        context: contextmenu.SelectorContext("a[href]"),
        contentScriptFile: [data.url("jquery.min.js"),data.url("onclick.js"),data.url("core.js")]     
    }); 
};

onclick.js

self.on("click", function (node) {
    user = node.href.substring(node.href.lastIndexOf('/') + 1);

    blacklist.push(user);

    blockthis();
});

一直出现这个错误:

onclick.js,
blacklist.push(user) 中的第 4 行
ReferenceError: blacklist is not defined

链接:https ://builder.addons.mozilla.org/addon/1054941/latest/

4

1 回答 1

2

内容脚本和您的扩展代码不在同一个上下文中运行 - 它们不共享任何变量,因此您不能简单地从上下文中的扩展访问变量。此外,您不能在内容脚本中使用 SDK 模块。内容脚本应该向扩展发送一条消息,并让它执行所有必要的操作:

self.on("click", function (node) {
    user = node.href.substring(node.href.lastIndexOf('/') + 1);
    self.postMessage(user);
    blockthis();
});

并在main.js

contextmenu.Item({
    label: "block",
    context: contextmenu.SelectorContext("a[href]"),
    contentScriptFile: [data.url("jquery.min.js"),data.url("onclick.js"),data.url("core.js")],
    onMessage: function(user)
    {
      blacklist.push(user);
    }
});

更多信息

于 2012-06-01T12:51:34.167 回答