0

对于初学者,我一直在尝试允许从页面脚本到内容脚本的通信。如果文档是准确的,这应该很容易。这就是我正在做的事情,我相信完全符合https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/communicating-with-other -scripts.html#Using%20the%20DOM%20postMessage%20API

这是我的现场测试用例

主.js:

exports.main = function() {
    var data = require('sdk/self').data,
            pageMod = require('sdk/page-mod');

    pageMod.PageMod({
        include: '*',
        contentScriptFile: data.url('postMessageRelay.js'),
    });
};

postMessageRelay.js

// Trying with window.addEventListener also doesn't work
document.defaultView.addEventListener('message', function (e) { // e.data, e.origin

    console.log('would be good if it got here:'+e.data);

});
console.log('it gets here at least');

以及常规 HTML 文件中的 JavaScript (在普通远程服务器上,而不是文件或本地主机上):

try {
    window.postMessage('webappfind', window.location.href);
}
catch(e) {
    alert(e);
}

这真的看起来像是此功能的完整错误或文档问题......我在尝试通过自定义事件进行通信时遇到了类似的问题,所以有点香蕉......

4

1 回答 1

1

Bug 910972中回答,但将其留给 SO 的未来访问者:

问题在于页面立即postMessage在 head 标记中触发,因此 page-mod 脚本甚至还没有附加到页面以侦听消息事件。只要考虑到此时间,本示例中的页面和内容脚本之间的来回通信就可以工作

于 2013-09-06T13:24:10.230 回答