我目前正在开发一个主要由 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/