我正在使用JPM Addon开发FireFox扩展。我正在从主index.js文件加载一个面板,如此...
var panel = require('sdk/panel');
var panel = panel.Panel({
contentURL: url('pages/popup.html'),
onHide: doHide
});
//and in another place...
panel.show({
position: button
});
pages / popup.html文件引用了一个javascript文件,我使用相对路径加载它。我需要弄清楚如何将这个由面板网页加载的javascript文件中的消息传递给插件的主index.js脚本文件。
我尝试了postMessage以及port.emit ...
所以,
//index.js
panel = require("sdk/panel").Panel({
onMessage: function(message) {
console.log(message);
}
});
//popup.js - panel file
panel.postMessage('something');
...或...
//index.js
panel.on("message", function(text) {
console.log(text);
});
//popup.js
self.port.emit('message', 'hello world');
但是,这些似乎都不起作用。救命啊!
答案 0 :(得分:0)
您应该阅读Scripting trusted panel content中的“MDN sdk/panel page”部分。最相关的文字是:
与内容脚本一样,这些脚本可以使用
postMessage()
API或port
API与附加代码进行通信。关键的区别在于这些脚本通过postMessage
对象访问port
和addon
对象,而内容脚本通过self
对象访问它们。
因此,您的 popup.js 代码应为:
addon.port.emit('message', 'hello world');
你的 index.js :
panel.port.on("message", function(text) {
console.log(text);
});
“Scripting trusted panel content”部分中有一个示例插件,显示了受信任面板(面板内容来自附加组件)和附加组件的主后台脚本之间的双向通信