如何检查Google Chrome扩展程序是否需要更新?

Har*_*ang 5 google-chrome google-chrome-extension

我知道对于网上商店中托管的扩展程序,当我推送更新时,Google会自动更新用户的扩展程序,但会有时滞(几个小时)。

扩展是否有办法检测是否有尚未应用的新更新?最简单的方法是以某种方式在网上商店中查询当前版本,并将其与已安装的版本进行比较,我想知道API中是否有与此相关的任何内容。

我知道chrome.app.getDetails()。version提供了当前安装的版本,但是有没有办法获取当前的网上商店版本?谢谢。

在最坏的情况下,我可以为扩展程序网上商店页面发布一个http get并从那里提取版本,但这似乎是超级hacky,所以我不希望这样做。

Imm*_*ion 6

另一种方法是使用chrome.runtime.onUpdateAvailable.addListener.

文档chrome.runtime.requestUpdateCheck指出不应使用此方法,因为 Google Chrome 会手动检查更新并安装更新(如果有)。通常 Google Chrome 每 5 小时检查一次更新。如果您的后台页面不是持久性的,则 Google Chrome 会在后台页面卸载时自动安装该扩展程序,否则仅在 Google Chrome 重新启动时安装。

chrome.runtime.onUpdateAvailable.addListener是一个事件侦听器,“当更新可用时触发,但不会立即安装,因为应用程序当前正在运行”。“应用程序当前正在运行”意味着后台页面“持久”或仍在运行,某些内容或后台脚本仍在运行等。

您可以chrome.runtime.reloadchrome.runtime.onUpdateAvailable.addListener发生火灾时手动调用,但这不是最好的方法。您应该 100% 确定它不会破坏应用程序进程,并且用户不会丢失一些敏感信息。最好通知用户(用alertchrome.notifications)。

// background.js
chrome.runtime.onUpdateAvailable.addListener((details) => {
    if (details) {
        // if you 100% sure about this.
        // chrome.runtime.reload();

        // too distract.
        // alert(`New version (${details.version}) is available. Restart the browser to update.`);

        // requires `notifications` permission.
        // chrome.notifications.create({
        //     type: "basic",
        //     iconUrl: chrome.extension.getURL("logo-48.png"),
        //     title: "Update available",
        //     message: `New version (${details.version}) is available. Restart the browser to update.`
        // });
    }
});
Run Code Online (Sandbox Code Playgroud)

然而,这都不是最好的方法,因为我们应该依赖(并尝试不做持久化后台页面,因为它破坏了更新过程)Google Chrome 的自动更新过程,并且不做任何额外的工作。


Xan*_*Xan 5

您错过了它,它在chrome.runtimeAPI中:

chrome.runtime.requestUpdateCheck(function callback)

要求对此应用程序/扩展名进行更新检查。

请注意,服务器可能会限制您的请求。您应该在回调中检查其响应,并在发生这种情况时减少请求频率。

如果您想对此更加主动,则可以为更新检查实现推送通知。但是,这可能是过大的考虑-考虑到Web Store对更新进行自动检查,这些更新在发布后至少可持续一个小时。

  • 非常感谢。我实际上问过谷歌的人,他们说这是不可能的。我不确定他们为什么不知道或忘记了 API 的这一部分。“经过与工程师团队的进一步讨论,我们认为没有一种简单的方法可以实现这一点。一旦 Chrome 知道有新版本(并且每 5 小时左右检查一次),它就会安装它。” (2认同)