端口错误:无法建立连接.使用sendMessage/onMessage不存在接收端



使用新的api sendMessage/onMessage发送消息,而不是sendRequest/onRequest,我在JS控制台中收到以下错误:Port error: Could not establish connection. Receiving end does not exist.

我不明白它是不是来了,因为它使用的是旧的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

sendMessage/onMessage在chrome的20.x.x.x版本之前不支持。因此,您需要通过检测浏览器版本来使用sendRequest/onRequest。您可以通过这行代码检测chrome浏览器版本。(parseInt(navigator.userAgent.match(/Chrom(e|ium)/([0-9]+)./)[2])>20)

@Matthieu我可以确认onMessage/sendMessage只从Chrome 20+开始工作,Chromium甚至在旧版本上也支持它们(对不起,我记不清是哪一个了)。然而,如果你遇到这种错误,可能是你遇到了一些错误,阻止Chorme加载后台页面,或者,如果你的脚本试图通过内容脚本获取数据,你可能会将控制台作为焦点,而不是普通的选项卡。通常是最后一个问题。

@rkp如果你想检测你的浏览器是否有sendMessage/sendRequest和它们各自的onMessage/onRequest,只需要检查chrome.extension.hasOwnProperty('onMessage')chrome.extension['onMessage']。如果它们是false,那么您的浏览器肯定只支持onRequest/sendRequest。无论您是否测试sendRequest/onRequest的存在,情况也是如此。

最新更新