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