使用新的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的存在,情况也是如此。