检测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 ,扩展已经更新。