Javascript Firefox加载项从*.port.on()设置全局变量
我不知道为什么这行不通。变量文本和大小显示为未定义,即使我在control_window.port.on中设置了它们。我还没有找到解决这个问题的办法Javascript Firefox加载项从*.port.on()设置全局变量,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我不知道为什么这行不通。变量文本和大小显示为未定义,即使我在control_window.port.on中设置了它们。我还没有找到解决这个问题的办法 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) {
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\u window.port.on()设置全局变量text和size
如果我初始化var text=“test”
和var size=“testsize”
页面将显示“test”
和“testsize”
,但是控制窗口.port.on()
仍然不会设置var text代码>或变量大小
从Firefox30开始,内容脚本的执行环境
已更改,因此内容脚本无法直接与页面共享对象
脚本。这会影响使用自定义事件从中发送消息
内容脚本到页面脚本
您需要使用window.postMessage()
在内容脚本之间进行通信
你可以按照这些思路做些事情
在PageMod
内容脚本中
// myscript.js
window.postMessage({text: self.options.text, size: self.options.size},'*');
在面板中
内容脚本
// controlget.js
window.addEventListener('message', function(event){
self.port.emit('start', event.data.text, event.data.size, 'some info', window.location.href);
});
祝你好运