2012-04-17 29 views
0

Safari擴展框架明確不支持擴展之間的消息傳遞。我正在尋找一個可行的黑客來解決這個問題,,而不讓頁面知道擴展正在運行兩個Safari擴展如何相互通信?

推薦(未測試):

  1. 一個擴展打開隱藏標籤至約:空白#擴展通道與openTab()。另一個通過URL搜索該標籤並找到它。他們產生和消費該頁面上的元素進行通信。

  2. 如果擴展程序可以跨域讀取cookie,則其中一個將在隨後的頁面上設置一個隨機ID爲的cookie,另一個會讀取它。然後,他們創建DOM事件的名稱extension-message-[the random ID]」,所以頁面不能聽

  3. 信訪Safari瀏覽器開發商onRequestExternal添加到他們的API。)

你能想到的另一種方法?你接受過任何上述的工作?

+0

我還沒有嘗試過這個,但可能[window.postMessage](https://developer.mozilla.org/en/DOM/window.postMessage)有幫助嗎? – canisbos 2012-04-17 21:38:04

回答

0

有可能在當前選項卡使用window.postMessage通過擴展之間的消息,與頁面作爲中介。

我已經版本分擔兩個y作爲概念證明的簡單演示擴展在https://github.com/canisbos/ClickClack。如果您安裝它們,您會看到單擊一個擴展程序的工具欄按鈕會導致其他按鈕圖像翻轉。

+0

這不會讓網頁知道擴展程序已安裝嗎?它也可以偵聽這些消息。 – 2012-04-20 14:48:30

+0

我想你是對的。 – canisbos 2012-04-20 23:14:34

0

設分機A開闢WebSocket連接到通過擴展B.用JavaScript實現一個WebSocket的服務器見socket.ioWebSocket-Node等允許兩個分機之間強大的雙向通訊,或延伸和外部世界之間。