2013-01-19 57 views
1

我想通过端口从我的main.js发送消息到我的面板的内容脚本。我已经尝试了很多东西,但没有运气,但是从内容脚本向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" 
}); 

回答

1

我在前几天就想通了,只是有没有时间在这里张贴。

有几件事情用面板时要记住:当扩展装载

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

这是我是如何实现它

在main.js

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

在面板内容脚本

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

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

function(secondArg) { 
} 
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

+0

这似乎不工作.. – XrXrXr

+0

您还必须将contentURL更改为'“http://www.google.com”' data.url返回一个特殊形式的url文件存储在你的插件的数据目录。 – paa

+0

是的,我做了,但它仍然没有工作 – XrXrXr