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

时间:2015-05-14 19:41:02

标签: google-chrome google-chrome-extension

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

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

我知道chrome.app.getDetails()。版本给了我当前安装的版本,但有没有办法获得当前的网络商店版本?感谢。

在最糟糕的情况下,我可以为我的扩展网页商店页面发出一个http获取并从那里提取出版本,但这似乎是超级hacky所以我不想这样做。

2 个答案:

答案 0 :(得分:4)

您错过了它,它位于chrome.runtime API:

  

chrome.runtime.requestUpdateCheck(function callback)

     

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

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

如果您想要更加主动,可以实施push notifications进行更新检查。但是,这可能有点过头了 - 考虑到Web Store会对您发布后可能持续长达一个小时的更新进行自动检查。

答案 1 :(得分:1)

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

chrome.runtime.requestUpdateCheck的文档说不应使用此方法,因为Google Chrome浏览器会手动检查更新并安装更新(如果可用)。通常,谷歌浏览器每5小时检查一次更新。如果您的背景页面不是永久性的,则Google Chrome将在卸载背景页面时自动安装扩展程序,否则仅在重新启动Google Chrome时安装。

chrome.runtime.onUpdateAvailable.addListener是一个事件侦听器,它“在有可用更新时触发,但由于该应用程序当前正在运行而没有立即安装”。 “应用程序当前正在运行”是指后台页面处于“永久”状态或仍在运行,某些内容或后台脚本仍在运行等。

您可以在chrome.runtime.reload触发时手动调用chrome.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.`
        // });
    }
});

但是,这不是最好的方法,因为我们应该依靠(并尝试不要保留后台页面,因为它破坏了更新过程)依赖于Google Chrome的自动所有更新过程,并且不要执行任何操作额外的工作。