【问题标题】:Firefox SDK access preferences from content script来自内容脚本的 Firefox SDK 访问首选项
【发布时间】:2014-08-01 11:58:29
【问题描述】:

关于

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

【问题讨论】:

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


    【解决方案1】:

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

    您可以通过消息与内容脚本通信: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);
      }
    });
    

    【讨论】:

    • 感谢您的帮助!我已成功发送偏好信息。但我不知道如何将消息与 onPrefChange 结合起来。
    • 我发现这个:stackoverflow.com/a/10168577/897024 - 显然你必须将prefChange 监听器放在onAttach 函数中。我更新了答案,但我现在无法真正测试它
    • 我已经做到了,我很确定您编辑的答案也能正常工作。我将工作人员存储在一个变量中,以便我可以使用“onAttach”之外的“onPrefChange”函数访问它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多