解决Chrome extension 报错 The message port closed before a response was received
在开发谷歌插件过程中,突然报错下面内容,并无法消除。这是chrome版本73更新后的问题。去stackoverflow查询得出的结果是跨域问题。然而在解决完所有跨域后仍然报错,也就是说并不是跨域导致的。解决方案这是由于某一脚本页(content-script.js or background.js or popup.js)使用了chrome.runtime.sendMessage或者t...
在开发谷歌插件过程中,突然报错下面内容,并无法消除。
这是chrome版本73更新后的问题。
去stackoverflow查询得出的结果是跨域问题。
然而在解决完所有跨域后仍然报错,也就是说并不是跨域导致的。
解决方案
这是由于某一脚本页(content-script.js or background.js or popup.js)使用了chrome.runtime.sendMessage
或者tabs.sendMessage
并调用了回调函数而接收函数并没调用导致的。
简单来看一段代码
//content-script.js
chrome.runtime.sendMessage({
action: "server",
source: "test",
},function(e){
alert('ok');
});
上面的消息发送函数发送了test消息,并调用了回调函数用来alter(‘ok’)。
background.js
chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.action === "server") {
var a= 0;
} } );
而这里如果这样写,只处理逻辑,并不调用回调函数sendResponse(),就会出现文章开头的错误
正确的写法如下
//background.js
chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.action === "server") {
var a= 0;
sendResponse({farewell: "ok"}); //注意,注意,注意就是这个sendResponse函数一定要调用,否则就会报错
} } );
也就是说sendResponse({farewell: "ok"})
这一段不调用的话就会报文章开头的错误,但是很多情况下并没有调用,而发送函数自己却使用到了,从而导致这个错误。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)