对于初学者,我一直在尝试允许从页面脚本到内容脚本的通信。如果文档准确,这应该很容易。这就是我正在做的事情,我完全相信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进行沟通时遇到了类似的问题,所以去了一点香蕉......
答案 0 :(得分:1)
在Bug 910972回答,但留待以后访问SO:
问题在于页面在head标记中立即触发postMessage
,因此页面模式脚本甚至尚未附加到页面以侦听消息事件。只要考虑此时间,就可以在页面和内容脚本as in this example works之间来回通信