2013-02-04 30 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會提出這個論點,並提供了關於方法。

但是,感謝名單到計算器,你將不必:-)