Javascript Firefox加载项从*.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) {

我不知道为什么这行不通。变量文本和大小显示为未定义,即使我在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) {
  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);
});
祝你好运