javascript - 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 实现不同的功能执行。
解决方案
在后台脚本中,如果你异步调用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;
});
推荐阅读
- html - 如何将我的 JSON 数据映射到 Angular 组件 .HTML 表
- r - 根据间隔拆分字符串
- angular - auth0 http拦截器StaticInjectorError
- python - 模块“cv2.cv2”没有属性“dnn_superres”
- mongodb - Mongo:引用同一集合中另一个文档的_id字段
- python-3.x - os.system 或 subprocess.call() 在 azure 函数中不起作用
- excel - 如何使用 xlsx_builder_package 在 xlsx 文件中添加公式
- python - 两个数据帧 fet 差异( numpy )
- python - Boto3 create_image 用于 AMI 创建 - 保存所有卷
- jquery - 两个 select2 工作正常,但它没有从 ajax 获取数据