检测Chrome扩展程序首次运行/更新
扩展程序如何能够发现它是第一次运行还是刚刚更新,以便扩展可以执行一些特定的操作? (例如打开帮助页面或更新设置)
在更新版本的Chrome(自Chrome 22以来)中,您可以使用chrome.runtime.onInstalled
事件,该事件更清晰。
例:
// Check whether new version is installed chrome.runtime.onInstalled.addListener(function(details){ if(details.reason == "install"){ console.log("This is a first install!"); }else if(details.reason == "update"){ var thisVersion = chrome.runtime.getManifest().version; console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!"); } });
如果你想检查扩展是否已经安装或更新,你可以做这样的事情:
function onInstall() { console.log("Extension Installed"); } function onUpdate() { console.log("Extension Updated"); } function getVersion() { var details = chrome.app.getDetails(); return details.version; } // Check if the version has changed. var currVersion = getVersion(); var prevVersion = localStorage['version'] if (currVersion != prevVersion) { // Check if we just installed this extension. if (typeof prevVersion == 'undefined') { onInstall(); } else { onUpdate(); } localStorage['version'] = currVersion; }
幸运的是,现在有事件发生 (自Chrome版本22和更新事件25以来)。
对于已安装的活动:
chrome.runtime.onInstalled.addListener(function() {...});
对于OnUpdateAvailable事件:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
关于开发者文档中的OnUpdateAvailable的重要摘录如下:
更新可用时触发,但由于应用程序当前正在运行,因此未立即安装。 如果你什么都不做,更新将在下一次后台页面被卸载的时候被安装,如果你希望它被安装的更快,你可以明确地调用chrome.runtime.reload()。
简单。 当扩展第一次运行时, localStorage
是空的。 在第一次运行时,您可以在那里写一个标记,将所有后续运行标记为非第一次。
例如,在background.htm中:
var first_run = false; if (!localStorage['ran_before']) { first_run = true; localStorage['ran_before'] = '1'; } if (first_run) alert('This is the first run!');
编辑:要检查扩展是否刚刚更新,存储版本而不是简单的标志在第一次运行,然后当当前的扩展版本(通过XmlHttpRequest
清单得到它)不等于存储在localStorage
,扩展已经更新。
- XMLHttpRequest无法加载文件。 跨源请求仅支持HTTP
- Google Chrome将本地主机redirect到https
- 如何在chrome中显示图片的替代文字
- Xlib:扩展名“RANDR”缺less显示“:21”。 – 试图运行无头谷歌浏览器
- Chrome“开发者工具”元素 – 隐藏恼人的黄色尺寸框
- 如何更改chrome封装的应用程序ID或者为什么我们需要manifest.json中的关键字段?
- 如何在Chrome“JavaScript控制台”中使用“严格”模式
- Chrome开发工具:如何跟踪networking的链接,打开一个新的标签?
- Chrome中不再允许使用selectionStart / selectionEndinputtypes=“数字”