获得对 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:无法建立连接的主要内容,如果未能解决你的问题,请参考以下文章

选中复选框时如何将AJAX值发送为1,未选中时如何发送0?

jQuery 代码在选中复选框时有效,但在未选中时无效

MPMediaPickerController 图标的背景颜色,未选中时

Xcode Autolayout - 未选中时视图旋转

Oracle ApEx 复选框以在选中/未选中时操作其他值

PHP JQuery Checkbox - 如果复选框被预先选中,它不会在未选中时删除“选中”属性