2012-09-14 33 views
0

使用新的API的sendMessage /的onMessage發送消息,而不是sendRequest將/ onRequest,我發現了以下錯誤的JS控制檯:Port error: Could not establish connection. Receiving end does not exist.端口錯誤:無法建立連接。接收端不存在使用的sendMessage /的onMessage

我不能被理解這是因爲它正在使用舊的API。

下面是一些例子:

//content.js 
chrome.extension.sendMessage({index: number}, function(response) { 
    console.log("test", response.data);       
});                



//background.js 
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
    // From content script.             
    if (sender.tab) { 
    //stuff 
    } 
    sendResponse({who: "me",data: "tata"}); 
}); 

任何想法? thx

+0

首先 - 您的偵聽器函數應返回true以使sendResponse()工作。順便說一句,也許你的background.js根本不工作? –

+0

你是什麼意思是不工作? –

+0

我的意思是它沒有加載。 –

回答

0

sendMessage/onMessage在20.x.x.x之前版本的chrome中不支持。所以你需要通過檢測瀏覽器版本來使用sendRequest/onRequest。您可以通過這一行代碼檢測Chrome瀏覽器版本。 (parseInt(navigator.userAgent.match(/ Chrom(e | ium)/([0-9] +)./)[2])> 20)

+0

完全相反。 sendMessage/onMessage存在於Chrome 20+上。見http://developer.chrome.com/extensions/whats_new.html#20 –

+0

ohhh是Matthieu應該有之前,而不是之後... :) –

+0

因爲我在鉻21上運行,它不應該是一個問題對我而言。 –

0

@Matthieu我可以確認onMessage/sendMessage的工作原理從Chrome 20+開始,Chromium甚至在舊版本上支持它們(我記不起哪一個,對不起)。但是,如果您遇到此類錯誤,可能是因爲某些錯誤導致Chorme無法加載背景頁面,或者如果您的腳本嘗試通過內容腳本獲取數據,則可能會重點關注控制檯,而不是常規選項卡。通常這是最後一個問題。

@rkp如果你想檢測你的瀏覽器是否有sendMessage/sendRequest和他們的onMessage/onRequest,只是爲了檢查chrome.extension.hasOwnProperty('onMessage')chrome.extension['onMessage']。如果它們是錯誤的,那麼你的瀏覽器肯定只支持onRequest/sendRequest。無論您是否測試sendRequest/onRequest的存在,情況也是如此。

+0

這是答案還是應該是兩個單獨的評論? –

+0

這是我確認哪些版本支持這些方法的答案,爲什麼此錯誤可能會出現在擴展中,以及如何正確識別這些擴展方法而不依賴'userClient'和RegExp。這些提及僅用於澄清我的答案的參考。如果他們在我的回答中混淆,我會刪除他們。 – Ragnarokkr

相關問題