javascript - chrome 扩展程序重新加载后无法发送消息

标签 javascript google-chrome google-chrome-extension

我目前正在开发一个主要由 JS 应用程序驱动的 Chrome 扩展。 我可以使用长期连接在应用程序和后台页面之间发送消息,直到重新加载扩展为止。 一旦重新加载,就无法连接到它(无论是从内容脚本还是从使用扩展 ID 的 JS 代码)。它一直说“尝试使用断开连接的端口对象”。 我尝试切换到一次性请求模型,但没有成功。重新加载扩展后,将在不带参数的情况下调用 sendMessage 回调,并且扩展不会收到任何消息。 我按照这个解决方案中的提示进行操作: chrome.runtime.sendMessage throws exception from content script after reloading Chrome Extension 但这并没有改变任何事情。

我在这方面缺少什么?

编辑:

以下是我设置连接的方法:

var port = chrome.runtime.connect()
// Then I use a DOM message to communicate with content-script :
window.addEventListener("message", function(message) {
    port.postMessage(message);
}

最佳答案

你没有错过任何东西。这就是目前的运作方式。我也不喜欢它。这很常见,因为当 chrome 自动更新扩展时,即使在使用中,也会发生这种情况。
我通过检测您提到的特定错误在我的扩展中处理这个问题。然后,每个内容页面都会显示一个小的无模块对话框,告诉用户忽略或重新加载网页。另外,Trello chrome 扩展从 2 天前开始执行此操作。虽然它不是很好,但我把它作为一个机会,使用 moddless 对话框中的链接向用户介绍新功能。
另外,如果您想在后台捕获此内容,只需解析您的 list (作为资源公开)并将最新版本保存在本地存储中。你会发现它已更新。还有 onUpdated 但我从未使用过它。
我想如果您确实必须从内容到新扩展进行通信,您可以在固定的 storage.local 属性中写入一条消息。后台注册存储更改,并通过读取该存储并在处理后将其删除来检测待处理的消息。无法回复,除非您也使用本地存储进行回复并在内容端进行相同的观看。

关于javascript - chrome 扩展程序重新加载后无法发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308841/

相关文章:

javascript - 如何将 PhantomJS 添加到我的 Chrome 扩展程序?

css - 字体粗细不适用于 Chrome 中的标签

javascript - 使用 webpack 将 Assets 文件夹推送到公共(public)目录

javascript - CustomValidator 客户端验证功能未触发

javascript - 将一键事件绑定(bind)到三个不同的链接

php - 谷歌浏览器 Cookies - HTTP 和 HTTPS

Internet Explorer 中忽略的 HTML/CSS 表格高度

javascript - Chrome 扩展 : sendMessage doesn't work

javascript - 查找不在网络历史记录中的上一页的 URL

javascript - 有什么方法可以导入 ES 模块的各个部分而不产生副作用吗?