1

我正在尝试通过端口从我的 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"
});
4

2 回答 2

1

几天前就想通了,只是没有时间在这里发帖。

使用面板时需要注意的几点:

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

这就是我实现它的方式

在 main.js

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

在面板内容脚本中

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

port.emit() 不需要第二个参数,尽管第二个参数将传递给内容脚本

function(secondArg) {
}
于 2013-01-30T14:48:50.073 回答
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

于 2013-01-19T20:24:55.783 回答