首页 > 解决方案 > Chrome 扩展错误“未检查的 runtime.lastError:消息端口在收到响应之前关闭”

问题描述

我试图简单地从 popup.js 调用 background.js 中的一个函数。但是,我得到“未检查的 runtime.lastError:消息端口在收到响应之前关闭。” 错误。

我最初的“握手”消息工作正常,没有错误,但我的“另一个消息”得到了上面的错误。

我正在尝试遵循此处找到的 onMessage 和 sendMessage 文档,但我可能做错了什么。

popup.js

//works perfectly fine
chrome.runtime.sendMessage({msg:"Handshake"}, response => {
    if(response.error){
        console.log(response);
    }
});

//Gives error message
chrome.runtime.sendMessage({msg:"AnotherMessage"}, response => {
    if(response.error){
        console.log(response);
    }
});

我想要两个“sendMessage”的原因是因为我想根据某些逻辑在 background.js 中执行特定的功能。

背景.js

chrome.runtime.onMessage.addListener((request,sender,sendResponse){
if(request.msg === "Handshake"){
    //Do something
} else if (request.msg === "AnotherMessage") {
    //Do something else
   }
});

更新:为了添加一些上下文,我的扩展中基本上有两种形式。我想将表单提交的数据发送到我的数据库,所以' form-1 '提交执行' function-1 ',' form-2 '提交应该在background.js中执行' function-2 '。我正在尝试通过 sendMessage 和 onMessage 实现不同的功能执行。

标签: javascriptgoogle-chrome-extensionmessage-passing

解决方案


在后台脚本中,如果你异步调用sendResponse,你必须从回调函数中返回true

 chrome.runtime.onMessage.addListener((request,sender,sendResponse){
    if (request.msg === "Handshake"){
        //Do something
    } else if (request.msg === "AnotherMessage") {
        //Do something else
   }
   return true;   
});

推荐阅读