0

所以我有自己的 xul 界面,其中包含 xul 浏览器,它需要从我的网站加载网页。根据网页,我希望它调用 window.postMessage,我的 contentscript(由 loadFrameScript 加载)应该捕获它,然后通过 sendSyncMessage 与主脚本对话。

https://developer.mozilla.org/en-US/docs/The_message_manager中的代码可以完美地工作(底部的简单示例)从我的网页监听点击事件。但是,我无法将事件侦听类型从“单击”更改为“消息”。它只是默默地失败。

从以下:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.9/dev-guide/guides/content-scripts/communicating-with-other-scripts.html

我想也许我应该像这样收听来自网页的消息......

document.defaultView.addEventListener('message', function(event) { sendSyncMessage(...);}, false);

...但是当我尝试以这种方式进行设置时,我收到错误消息,指出该文档不存在。

同样,从 The_message_manager 文档中,它列出了内容脚本的可用全局变量,我尝试将“文档”替换为“内容”......但无济于事。

有人可以帮忙吗?谢谢。

4

1 回答 1

1

所以我找到了一个解决我的问题的方法。

不遗余力地翻阅 Mozilla 的文档,我偶然发现了这一点:

https://developer.mozilla.org/en-US/docs/Code_snippets/Interaction_between_privileged_and_non-privileged_pa​​ges

它主要提出了在主网页和 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 框架的弱类型性质和糟糕的文档,因为 IDE 会提出这个论点并提供有关该方法使用的文档。

但是,感谢stackoverflow,您不必:-)

于 2013-02-05T18:22:49.333 回答