解决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或者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"})这一段不调用的话就会报文章开头的错误,但是很多情况下并没有调用,而发送函数自己却使用到了,从而导致这个错误。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值