FF Addon SDK页面mod脚本使内容脚本通信无法正常工作

时间:2013-08-26 12:49:33

标签: firefox-addon-sdk postmessage

对于初学者,我一直在尝试允许从页面脚本到内容脚本的通信。如果文档准确,这应该很容易。这就是我正在做的事情,我完全相信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

这是我的直播 test case

main.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');

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

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

这看起来要么是这个功能的完整错误,要么是文档的问题......我在试图通过custom events进行沟通时遇到了类似的问题,所以去了一点香蕉......

1 个答案:

答案 0 :(得分:1)

Bug 910972回答,但留待以后访问SO:

问题在于页面在head标记中立即触发postMessage,因此页面模式脚本甚至尚未附加到页面以侦听消息事件。只要考虑此时间,就可以在页面和内容脚本as in this example works之间来回通信