0

我正在使用 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');

但是,这两种方法似乎都不起作用。帮助!

4

1 回答 1

0

您应该阅读MDN sdk/panel 页面中的“编写可信面板内容脚本”部分。最相关的文字是:

postMessage()与内容脚本一样,这些脚本可以使用API 或API与附加代码进行通信port。关键的区别在于这些脚本通过对象访问postMessage和对象,而内容脚本通过对象访问它们。portaddonself

所以,你的popup.js代码应该是:

addon.port.emit('message', 'hello world');

还有你的index.js

panel.port.on("message", function(text) {
  console.log(text);
});

“脚本可信面板内容”部分中有一个示例插件,显示了可信面板(面板内容来自插件内部)和插件的主后台脚本之间的双向通信。

于 2016-08-29T19:21:08.010 回答