Firefox SDK从内容脚本访问首选项

时间:2014-08-01 11:58:29

标签: javascript firefox-addon firefox-addon-sdk

关于

我正在使用Firefox Add-on SDK开发Firefox附加组件。该加载项将是特定于站点的,它将根据用户首选项隐藏某些元素。

几年前我已经制作了这个附加组件,但是使用新的SDK会有所不同。


代码

因为附加组件是特定于站点的,我需要修改站点的内容,所以我使用' PageMod '模块

[ main.js ]

pageMod.PageMod({
  include: "*.ipvisie.com",
  contentScriptFile: [
    data.url('jquery-1.11.1.min.js'),
    data.url('script.js')
  ]
});

这很好用,实现了jQuery,我可以从script.js

添加和运行javascript

我已在' package.json '中声明了偏好设置,这非常有用。我可以从' main.js '

访问此内容


问题

我的问题是ContentScript无法访问用户首选项。

如何在ContentScript' script.js '中访问当前首选项?


尝试过尝试

尝试1
我尝试的第一件事就是从ContentScript请求首选项

if (require('sdk/simple-prefs').prefs['somePreference'] == true) {
    alert('Pref checked');
}



尝试2 我在文档中读到可以使用ContentScript发送一些只读参数。这似乎有效,但当我改变我的偏好时,价值已经设定。只有当我重新启动浏览器时才会传递正确的设置。

contentScriptOptions: {
    advertLink: require('sdk/simple-prefs').prefs['advertTop'],
    advertDay: require('sdk/simple-prefs').prefs['advertDay'],
    advertAdmart: require('sdk/simple-prefs').prefs['advertAdmart'],
    advertLink: require('sdk/simple-prefs').prefs['advertLink']
}

1 个答案:

答案 0 :(得分:4)

每次首选项更改时,您都应该将新的首选项发送到内容脚本,而不仅仅是在脚本初始化时。

您可以通过以下消息与内容脚本进行通信:Communicating With Content Scripts
创建一个接收更改的首选项名称和值的函数,并使用preference change listener将更改发送到脚本:

pageMod.PageMod({
  // ...
  onAttach: function(worker) {
    worker.port.on("prefChange", function(prefName, prefValue) {
      // update page ...
    });

    function onPrefChange(prefName) {
      self.port.emit("prefChange", prefName, require("sdk/simple-prefs").prefs[prefName]);
    }
    require("sdk/simple-prefs").on("", onPrefChange);
  }
});