Chrome 扩展错误“未检查的 runtime.lastError:消息端口在收到响应之前关闭”
Posted
技术标签:
【中文标题】Chrome 扩展错误“未检查的 runtime.lastError:消息端口在收到响应之前关闭”【英文标题】:Chrome extension error "Unchecked runtime.lastError: The message port closed before a response was received" 【发布时间】:2020-05-11 19:31:11 【问题描述】:我试图简单地从 popup.js 调用 background.js 中的一个函数。但是,我得到“未检查的 runtime.lastError:消息端口在收到响应之前关闭。”错误。
我最初的“握手”消息运行良好,没有错误,但我的“AnotherMessage”收到上述错误。
我正在尝试遵循here 找到的 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 中执行特定的功能。
background.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 em>' 提交应该在 background.js 中执行 'function-2'。我正在尝试通过 sendMessage 和 onMessage 实现不同的功能执行。
【问题讨论】:
在后台脚本中,如果异步调用sendResponse
,则必须从回调函数中返回true
。
尝试将第二个 sendMessage 放在第一个的回调中。
请把我当白痴对待。我不确定您的意思,您介意详细说明吗?
【参考方案1】:
在后台脚本中,如果异步调用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;
);
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。以上是关于Chrome 扩展错误“未检查的 runtime.lastError:消息端口在收到响应之前关闭”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Chrome 33+ 中通过 GPO 自动安装 Chrome 扩展(Chrome 错误或 GPO 安装的扩展的未记录更改?)