无法从内容脚本中的main.js接收端口消息

时间:2013-01-19 18:35:50

标签: firefox-addon firefox-addon-sdk

我正在尝试通过端口从我的main.js发送消息到我的面板的内容脚本。我已经尝试了许多没有运气的东西,但是从内容脚本向main.js发送消息非常有效。

这是我的main.js的样子:

var data = require("self").data;
var setting = require("panel").Panel({
  width: 250,
  height: 130,
  contentURL: data.url("www.google.com"),
  contentScriptFile: data.url("script.js")
});
require("widget").Widget({
  id: "sorter1",
  label: "Search Result Sorting",
  contentURL: data.url("icon.ico"),
  panel: setting
});
setting.port.emit("message");

这是我的内容脚本:

self.on("message", function(addonMessage) {
  document.innerHTML = "Got Message"
});

2 个答案:

答案 0 :(得分:1)

我几天前想到了这个问题,只是没有时间在这里发帖。

使用面板时要记住的一些事项:

  • 加载扩展时加载Pannel页面,而不是在显示时加载。
  • 当显示页面时,面板页面的内容脚本会被注入面板页面。(当contentScriptWhen属性为默认值时)
  • 内容脚本无法访问附加SDK资源。

这就是我实施它的方式

在main.js

panel.on("show", function() {
     panel.port.emit("message");
});

在面板内容脚本中

self.port.on("message", function() {
    //doThings
});

port.emit()不需要第二个参数,但第二个参数是将传递给

的内容脚本的内容
function(secondArg) {
}

答案 1 :(得分:0)

[更新]抱歉,我没有完全阅读该代码。

首先,您实际上需要向面板发送消息,例如

setting.port.emit('message', someData);

第二部分:我想你想要:

self.port.on("message", function(addonMessage) {
    document.innerHTML = "Got Message"
});

相关文档在这里:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/using-port.html