2013-02-04 34 views
0

因此,我有我自己的xul界面,其中包含一个xul浏览器,它需要从我的网站加载一个网页。根据网页,我希望它调用window.postMessage,我的contentcript(由loadFrameScript加载)应该捕获,然后通过sendSyncMessage返回到主脚本。从browser.messageManager.loadFrameScript获取内容以侦听邮件事件

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文档中,它列出了可用于内容脚本的全局变量,并试图将“文档”替换为“内容”...无济于事。

任何人都可以帮忙吗?感谢名单。

+0

我现在看到通信的PageMod风格的引用是完全独立于loadFrameScript。不太熟悉Addon-SDK,但似乎不适用。仍然卡住。 –

回答

1

所以我发现了一个解决方案,我的问题与转折。

不留页千方百计Mozilla的文档,我偶然发现APON这样的:

https://developer.mozilla.org/en-US/docs/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

它主要建议发送关闭主网页和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! ...在向addEventListener()添加'true'作为神秘的第四个参数之前也失败了。自定义事件完全符合我的需求,所以我认为这是一个解决方案。

因此,我基本上因为这个神秘的论证而失去了2天的生命,我从根本上归咎于Javascript框架的弱类型本质和糟糕的文档,因为IDE会提出这个论点,并提供了关于方法。

但是,感谢名单到计算器,你将不必:-)