所以我有自己的包含xul浏览器的xul界面,它需要从我的网站加载一个网页。根据网页的不同,我希望它调用window.postMessage,我的内容脚本(由loadFrameScript加载)应该捕获,然后通过sendSyncMessage与主脚本对话。
来自https://developer.mozilla.org/en-US/docs/The_message_manager的代码完美无缺(底层的简单示例)从我的网页中侦听点击事件。但是,我无法将事件监听类型从“单击”更改为“消息”。它只是默默无闻。
以下内容:
我想也许我应该反过来从网页上收听消息......
document.defaultView.addEventListener('message', function(event) {
sendSyncMessage(...);}, false);
...但是当我尝试以这种方式进行设置时,我收到错误消息,指出该文档不存在。
同样,从The_message_manager文档中,它列出了内容脚本的可用全局变量,我尝试将“document”替换为“内容”......但无济于事。
有人可以帮忙吗?感谢名单。
答案 0 :(得分:1)
所以我找到了解决问题的方法。
对于Mozilla的文档不遗余力,我偶然发现了这个:
它主要暗示了在主网页和chrome(不是我的用例)之间发送事件(注入元素)的过时方式。但其中一条线是纯金。
"Note: If you're using HTML5's postMessage() to send a message from unprivileged code to privileged code, adding 'true' to the end of your event listener in your privileged chrome code will allow the message to be received.
1
document.addEventListener("message", function(e) { yourFunction(e); }, false, true);"
现在这个解决方案似乎不适用于window.postMessage()事件,但该解决方案适用于CustomEvents !! ...在添加'true'作为addEventListener()的神秘第四个参数之前也失败了。自定义事件完全符合我的需求,所以我认为这是一个解决方案。
基本上,由于这个神秘的论点,我基本上归咎于Javascript框架的弱类型性质和糟糕的文档,因此基本上我归咎于我生命中的2天,因为IDE会提出这个论点并提供它的使用文档的文档。方法
然而,thanx to stackoverflow,你不必: - )