获得当前和以前的版本号在谷歌Chrome扩展
getting current and previous version number on Google Chrome Extension
我想比较版本号,而我更新我的Chrome扩展。
原因是有一些结构变化,我不希望我的用户(他们已经拥有我的模块)再次添加他们的详细信息。
我知道我可以通过这行获得当前运行模块的版本号:
chrome.runtime.getManifest().version
我的问题是,当我更新的时候,我如何比较版本,或者我应该从另一个角度看问题?
升级时调用的API是chrome.runtime.onInstalled
chrome.runtime.onInstalled.addListener(details => {
if (details.reason === "update") {
let newVersion = chrome.runtime.getManifest().version;
console.log(`Updated from ${details.previousVersion} to ${newVersion}`);
}
});
你可以让你的逻辑依赖于它,但它是脆弱的。您的存储模式不太可能更改每个版本,并且您需要考虑那些不进行每次升级而是跳转版本的用户(例如,机器长时间离线)。此外,没有内置函数来比较版本字符串。
最好将存储模式的版本与数据本身一起存储,并触发从onInstalled
的数据迁移。
var defaults = {
someData: "reasonableDefault",
/* ... */
storageSchema: 5 // Increment this when data format changes
};
chrome.runtime.onInstalled.addListener(details => {
if (details.reason === "update") {
migrateData(doSomeInitialization);
}
});
function migrateData(callback) {
// This pulls stored values, falling back to defaults, if none
chrome.storage.local.get(defaults, data => {
let migrated = false;
while (!migrated) {
switch (data.storageSchema) {
case 1:
/* modify data to migrate from 1 to 2 */
data.storageSchema = 2;
break;
/* ... */
case 4:
/* modify data to migrate from 4 to 5 */
data.storageSchema = 5;
break;
case defaults.storageSchema: // Expected; we're done migrating
migrated = true;
break;
default:
throw new Error(`Unrecognized storage schema ${data.storageSchema}!`);
}
}
chrome.storage.local.set(data, callback);
});
}
注意,你将需要一些特殊的逻辑的情况下,storageSchema
没有在旧版本中使用;否则,该代码将提供默认值(因为它不在存储中),并且不会进行迁移。所以最好在第一个版本发布之前实现这个。
onInstalled
(截至2016-11-01)onInstalled
只是一个优化
相关文章:
- .scroll()函数在上次更新后在谷歌chrome中定位闪烁
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 如何知道你右键点击谷歌chrome扩展是什么
- 对齐底部的DIV-谷歌Chrome扩展
- 当我用ctrl+p搜索时,为什么要在谷歌chrome上使用inspect来调试缺少显示文件js
- 从谷歌chrome中的任何网页获取所有tel标签
- 如何缩小我的谷歌chrome扩展's的javascript文件
- 当页面加载时,使谷歌chrome浏览器成为全屏浏览器
- 谷歌Chrome元素仍然存在:即使从光标移开,也要悬停
- 谷歌Chrome Chrome.usb/Chrome.hid锁定设备
- 我的jquery代码在谷歌chrome控制台中工作,而不是在保存它之后
- 谷歌Chrome扩展在用Javascript打开的弹出窗口中工作吗
- 基本的谷歌chrome扩展消息传递不起作用
- 如何操作谷歌chrome's PRINT选项
- 谷歌Chrome在范围滑块禁用时卡住了's的更改功能
- 谷歌Chrome日期选择器事件
- 如何允许在谷歌chrome中通过触摸屏放大和缩小iframe
- 谷歌chrome和FPS的奇怪行为
- 点击时禁用提交按钮,将阻止表单在谷歌Chrome上提交
- AngularJS-谷歌Chrome扩展中的动态链接断开