获得对 background.js 的响应时:未选中 runtime.lastError:无法建立连接
Posted
技术标签:
【中文标题】获得对 background.js 的响应时:未选中 runtime.lastError:无法建立连接【英文标题】:When getting response to background.js: Unchecked runtime.lastError: Could not establish connection 【发布时间】:2019-09-25 11:55:22 【问题描述】:noobie JS dev here,我正在开发一个 chrome 扩展,我有 2 个脚本,background.js 和 popup.js - 我需要根据 background.js 中的一些操作调用 popup.js 中的一个函数,所以我发现我可以发信息。这对我来说很好,但我还需要将响应发送回 background.js 脚本,并且在 popup.html:1 处收到此错误
未经检查的 runtime.lastError:无法建立连接。接收端不存在。
有趣的是,检查视图中的控制台:背景 @chrome://extensions/ 记录响应正常,但控制台检查弹出日志未定义并显示错误。
感谢您的帮助。
(以下代码已简化)
background.js:
chrome.runtime.sendMessage('hi', response =>
console.log(response);
);
popup.js
chrome.runtime.onMessage.addListener(
function (message, sender, sendResponse)
if (message == 'hi')
//some DOM actions here
sendResponse('bye');
return true;
);
【问题讨论】:
假设您知道弹出代码仅在显示时运行,因此您的后台脚本应该在适当的时间发送消息,唯一明显的事情(没有看到实际的扩展名)是不需要@987654324 @同步响应时。 @wOxxOm 是的,我知道它只有在弹出窗口打开时才会运行,那部分很好。我删除了 return true;它确实有效,但我非常困惑,因为我实际上添加了该行,因为没有它它就无法工作,并且在其他一些帖子中有人说它会有所帮助。 xDDD 所以我知道之前出了什么问题,但无论如何,谢谢.. @wOxxOm 我知道这可能问的太多了,但是由于我对这一切都很陌生,您能否向我推荐一些材料来解释为什么return true
将其从同步更改为异步?也许还有这两者之间有什么区别(我只知道一些基础知识)。
见Chrome Extension Message passing: response not sent
【参考方案1】:
刚刚按照@wOxxOm 的建议删除了return true
。
【讨论】:
以上是关于获得对 background.js 的响应时:未选中 runtime.lastError:无法建立连接的主要内容,如果未能解决你的问题,请参考以下文章