内容脚本中的Firefox SDK访问首选项

关于

我正在使用Firefox附加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']
}

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

您可以通过消息与内容脚本进行通信:与内容脚本进行通信
创建一个接收已更改的首选项名称和值以及首选项更改侦听器以将更改发送到脚本的函数:

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);
  }
});
链接地址: http://www.djcxy.com/p/80637.html

上一篇: Firefox SDK access preferences from content script

下一篇: mode cannot handle backquoted backslashes