我不知道为什么这不起作用。即使我在control_window.port.on中设置了vars文本和大小,也会显示为未定义。我还没有找到解决方法。
var self = require('sdk/self');
// a dummy function, to show how tests work.
// to see how to test this function, look at test/test-index.js
function dummy(text, callback) {
callback(text);
}
exports.dummy = dummy;
//ignore above
var buttons = require('sdk/ui/button/action');
var tabs = require("sdk/tabs");
var pageMod = require("sdk/page-mod");
var data = require("sdk/self").data;
var text;
var size;
function setTextAndSize(texts, siz) {
text = texts;
size = siz;
}
pageMod.PageMod({
include: "*.example.com",
contentScriptFile: data.url("myscript.js"),
contentScriptOptions: {"text" : text, "size" : size}//text and size are undefined even though I set them line 57.
});
var control_window = require("sdk/panel").Panel({
contentURL: data.url("control.html"),
contentScriptFile: data.url("controlget.js")
});
var button = buttons.ActionButton({
id: "myicon",
label: "My add on",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
control_window.on("show", function() {
control_window.port.emit("show");
});
function opentabb() {
tabs.open("http://example.com");
}
control_window.port.on("start", function (text, size, info, link) {
console.log("Text: "+text+" Size: "+size);//this works
control_window.hide();
setTextAndSize(code, size);//does not set for some reason
opentabb();
});
control_window.port.on("text-entered", function (text) {
console.log(text);
control_window.hide();
});
function handleClick(state) {
control_window.show();
}
我想从control_window.port.on()
如果我初始化var text = "test"
和var size = "testsize"
,则pagemod会显示"test"
和"testsize"
,但control_window.port.on()
仍然不会设置var text;
或{{1} }}
答案 0 :(得分:0)
从Firefox 30开始,内容脚本的执行环境 已更改,因此内容脚本无法直接与页面共享对象 脚本。这会影响使用自定义事件发送消息 用于页面脚本的内容脚本。
您需要使用window.postMessage()
在内容脚本之间进行通信。
你可以沿着这些方向做点什么。
在PageMod
内容脚本中。
// myscript.js
window.postMessage({text: self.options.text, size: self.options.size},'*');
在Panel
内容脚本中。
// controlget.js
window.addEventListener('message', function(event){
self.port.emit('start', event.data.text, event.data.size, 'some info', window.location.href);
});
祝你好运。