2012-03-23 48 views
1

的行爲我很好奇onConnect,connect和port.postMessage/onMessage如果有多個偵聽器應該表現如何。文檔不清楚會發生什麼,以及斷開連接的位置。extension.onConnect,extension.connect和端口

假設我有三個上下文(後臺頁面,內容腳本和瀏覽器操作彈出窗口) - 每個啓動時都註冊了一個onConnect監聽器。後臺頁面要發送消息給他們兩個 - 我可以簡單地連接(),然後通過端口發送消息?如果我想要收據確認怎麼辦?我可以在接收onConnect的兩種上下文中說 - port.postMessage({received:true})嗎?我會在連接()的人那裏收到兩條消息嗎?我會在調用connect()的背景頁面中收到onConnect()消息嗎?

我讀過http://code.google.com/chrome/extensions/messaging.htmlhttp://code.google.com/chrome/extensions/extension.html# - 他們很清楚sendRequest和onRequest是如何工作的,但我需要發送確認,我不認爲我可以充分地從sendRequest中獲取。

我的問題歸結爲:Port對象有多少「端」,以及它如何處理來自任何端的「斷開」調用?

回答

1

這些端口其實很簡單。我認爲一個例子會更好地工作,請注意,我沒有使用內容腳本,但這裏有一個我創建的實用程序腳本,名爲socket.js,它允許在彈出窗口和背景頁面之間進行連續的雙向通信。

https://github.com/jjNford/chrome-extension-socket

我目前使用它在此擴展:

https://chrome.google.com/webstore/detail/jgekomkdphbcbfpnfjgcmjnnhfikinmn

的postTask API是UX的目的很好。我知道我沒有直接回答你的問題,但我希望這可以幫助你。

+0

我喜歡的例子 - 但是我不理解端口是他們是否始終只有兩個目的,或者如果他們可以在應用程序的許多不同部分之間做溝通。 – Daniel 2012-04-02 20:09:19

+0

該API描述了端口創建「偵聽器」的方式,知道Google通常會做的事情,我認爲它可以有多個端點(以port.name來區分)。解決這個問題的最好方法是測試它。我的GitHub Repo提供了一個例子,只需添加缺少的內容即可。 – jjNford 2012-04-02 20:53:02