【发布时间】:2015-03-27 07:40:10
【问题描述】:
我正在使用main.js 中的以下代码向example.com 上的页面添加内容脚本:
var self = require("sdk/self");
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "https://example.com/*",
contentScriptWhen: "ready",
contentScriptFile: [
self.data.url("example.js"),
],
contentScriptOptions: {
myString: 'helloWorld'
}
});
如果我设置了一个工作程序或事件侦听器,告诉main.js 更新myString 的值(可从使用self.options.myString 的内容脚本访问),我如何在example.js 内容脚本中反映该更改为下一个example.com 页面加载?
我尝试使用新的myString 值再次调用pageMod.PageMod 函数,但这会导致example.js 在页面上运行两次。
编辑:
我已经实现了Port API,但现在我被困在如何更新contentScriptOptions 传递给内容脚本的对象上。
/* main.js */
var self = require("sdk/self");
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "https://example.com/*",
contentScriptWhen: "ready",
contentScriptFile: [
self.data.url("example.js"),
],
contentScriptOptions: {
myString: 'foo'
},
onAttach: function(worker) {
worker.port.on("updateOptions", function(data) {
// how to replace myString with value from data.myString?
});
}
});
和
/* example.js */
self.port.emit('updateOptions', { myString: 'bar' });
【问题讨论】:
-
请注意,您作为
contentScriptOptions传递的对象不能包含任何函数。
标签: javascript firefox firefox-addon-sdk