所有擴展頁面(背景頁面,彈出窗口,信息條,頁面動作都在同一個擴展內部運行。這個域名是你的擴展ID,每個擴展頁面就像一個普通的頁面(當你開發一個網站的時候是類似的)
所有擴展頁面(如上所述)都可以容易相互溝通,你有多種方式這樣做:
chrome.extension.getBackgroundPage()
你直接做!我會盡可能使用這種方法。在我看來它更乾淨。
var bkg = chrome.extension.getBackgroundPage();`
bkg.ping();`
chrome.extension.onRequest.addListener和chrome.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,我希望你現在瞭解內容腳本和擴展頁面之間的區別,並且它們之間的通信是通過擴展消息。
相關:[瀏覽器動作,後臺腳本和鉻擴展的內容腳本之間的通信的上下文和方法?](http://stackoverflow.com/questions/17246133/contexts-and-methods-for-communication-瀏覽器之間的行動背景sc) – 2014-01-13 21:40:56