chrome 分机重新加载后无法发送消息

chrome extension cannot send message after extension reload

我目前正在开发一个主要由 JS 应用程序驱动的 chrome 扩展。 在我重新加载扩展之前,我可以使用长期连接在应用程序和后台页面之间发送消息。 一旦重新加载,就无法连接到它(无论是从内容脚本还是从使用扩展 ID 的 JS 代码)。它一直在说 "Attemptin to use a disconnected port object"。 我尝试切换到一次性请求模型,但没有成功。重新加载扩展后,不带参数调用 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 自动更新扩展时会发生这种情况,即使在使用时也是如此。
我通过检测您提到的特定错误在我的扩展中处理这个问题。然后每个内容页面都会显示一个小的无模式对话框,告诉用户忽略或重新加载网页。 Plus for Trello chrome 扩展从 2 天前开始执行此操作。虽然它不是很好,但我把它当作一个机会,在无模式对话框中使用 link 告诉用户新功能。
另外,如果你想在后台捕获它,只需解析你的清单(作为资源公开)并将最后一个版本保存在本地存储中。您会检测到它已更新。还有 onUpdated 但我从未使用过它。
我想如果你真的必须从内容到新扩展进行通信,你可以在固定 storage.local 属性 中写一条消息。后台注册存储更改并通过读取该存储并在处理后将其删除来检测未决消息。无法回复,除非您也使用本地存储进行回复并在内容方面进行相同的观看。

跟进这个问题: 看来我的后台页面代码中存在阻止调用 chrome.runtime.onConnect 的问题。我修复了它,现在可以使用了。