0

使用新的 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"}); 
});

有任何想法吗 ?谢谢

4

2 回答 2

0

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

于 2012-09-15T11:26:25.013 回答
0

@Matthieu 我可以确认 onMessage/sendMessage 仅从 Chrome 20+ 开始有效,Chromium 即使在旧版本上也支持它们(我不记得是哪一个,抱歉)。但是,如果您遇到这种错误,可能是您遇到了一些错误,阻止了 Chorme 加载后台页面,或者,如果您的脚本试图通过内容脚本获取数据,您可能专注于控制台,而不是普通的选项卡。通常这是最后一个问题。

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

于 2012-10-06T23:35:46.160 回答