扩展程序重新加载

时间:2015-05-18 16:52:12

标签: 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);
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

跟进此问题: 我的后台页面代码中出现了一个问题,导致无法调用chrome.runtime.onConnect。我修好了它现在有效。