2011-01-20 147 views
4

我已閱讀和重新閱讀此頁,背景通信以及運行示例:請解釋與谷歌Chrome瀏覽器擴展

http://code.google.com/chrome/extensions/background_pages.html

但我似乎並沒有掌握如何做背景background.html,popup.html和content.js之間的通信。我想發送消息來觸發功能,獲取響應並處理這些響應。地圖樣本很接近幫助我,但我只需要一些超級簡單的東西,而不需要所有的地圖東西。 (注意,我知道jQuery和Javascript,所以如果你願意,可以隨意混合一些jQuery。)

+0

相關:[瀏覽器動作,後臺腳本和鉻擴展的內容腳本之間的通信的上下文和方法?](http://stackoverflow.com/questions/17246133/contexts-and-methods-for-communication-瀏覽器之間的行動背景sc) – 2014-01-13 21:40:56

回答

17

所有擴展頁面(背景頁面,彈出窗口,信息條,頁面動作都在同一個擴展內部運行。這個域名是你的擴展ID,每個擴展頁面就像一個普通的頁面(當你開發一個網站的時候是類似的)

所有擴展頁面(如上所述)都可以容易相互溝通,你有多種方式這樣做:

  1. chrome.extension.getBackgroundPage()

    你直接做!我會盡可能使用這種方法。在我看來它更乾淨。

    var bkg = chrome.extension.getBackgroundPage();` 
    bkg.ping();` 
    
  2. chrome.extension.onRequest.addListenerchrome.extension.sendRequest

    如下圖所示,你可以使用extension messaging將信息傳遞爲好。當我希望它是面向事件的時候,我使用這種方法。我很少在擴展頁面中使用它。

    popup.html

    chrome.extension.sendRequest({method: 'ping'}, function(response) { 
        // response.result 
    }); 
    

    background_page.html

    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
        if (request.method == 'ping') { 
         sendResponse({result: 'pong'}); 
        } 
    }); 
    

現在有 「擴展頁面」 和 「Content Scripts」 之間的差異。請仔細閱讀該文件以瞭解它。內容腳本不是擴展頁面,你不能做什麼擴展頁面。您無法直接與上述任何頁面進行溝通。內容腳本是在網頁上下文中運行的JavaScript文件,而不是擴展頁面。這是一個重要的區別。

因此,爲了在您的擴展頁面和內容腳本之間進行通信,您需要使用Messaging。該頁面有很多信息,我強烈建議您閱讀它。這與我們如何使用消息傳遞非常相似(上述第2步),但唯一不同的是您如何發送請求。您需要使用chrome.tabs.sendRequest,因爲您需要從擴展頁面(背景,彈出窗口,頁面等)向內容腳本發送一個請求。您需要知道標籤的ID才能做到這一點。請參閱Tab API瞭解更多信息。

如果您的擴展通常與您的內容腳本進行通信,您可以使用長連接,這在我上面喜歡的消息部分中有很好的解釋。

對於類似的問題,我也回答了很多問題和其他人。由於你在JavaScript方面經驗豐富,我強烈建議你閱讀文檔,它有你需要的一切。閱讀API,我希望你現在瞭解內容腳本和擴展頁面之間的區別,並且它們之間的通信是通過擴展消息。

+0

謝謝!清晰! :) – Volomike 2011-01-20 06:32:15