我知道在网上商店托管的扩展程序,当我推送更新时,Google会自动更新用户的扩展程序,但有一段时间(几个小时)。
扩展程序是否有办法检测是否有新的更新尚未应用?最简单的方法是以某种方式查询webstore上的当前版本并将其与已安装的版本进行比较,我想知道API中是否有任何内容。
我知道chrome.app.getDetails()。版本给了我当前安装的版本,但有没有办法获得当前的网络商店版本?感谢。
在最糟糕的情况下,我可以为我的扩展网页商店页面发出一个http获取并从那里提取出版本,但这似乎是超级hacky所以我不想这样做。
答案 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%确保它不会破坏应用程序流程,并且用户不会丢失一些敏感信息。最好使用alert
或chrome.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的自动所有更新过程,并且不要执行任何操作额外的工作。