Answers:
在较新版本的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 + "!");
}
});
更新了答案以反映清单的v3:
Chromium现在具有一组chrome.runtime API,可让您获取扩展程序的版本。
要获取当前版本:
chrome.runtime.getManifest().version
若要在首次安装扩展程序时,扩展程序更新为新版本以及Chromium更新为新版本时进行监听,可以使用该onInstalled
事件。
chrome.runtime.onInstalled.addListener((details) => {
const currentVersion = chrome.runtime.getManifest().version
const previousVersion = details.previousVersion
const reason = details.reason
console.log('Previous Version: ${previousVersion }')
console.log('Current Version: ${currentVersion }')
switch (reason) {
case 'install':
console.log('New User installed the extension.')
break;
case 'update':
console.log('User has updated their extension.')
break;
case 'chrome_update':
case 'shared_module_update':
default:
console.log('Other install events within the browser')
break;
}
})
就这样!
旧答案,2011年之前
如果要检查扩展程序是否已安装或更新,可以执行以下操作:
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;
}
prevVersion == 'undefined'
...他正在检查typeof prevVersion == 'undefined'
。typeof
检查变量是否未定义时使用它更健壮...请参阅此处以了解原因:stackoverflow.com/a/3550319/130691
幸运的是,现在有一些与此相关的事件(自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
,扩展名已已更新。
localStorage
确实在其自己的单独窗口中,并且不与@huyz提到的页面上的其他代码和扩展共享。但是,对于扩展名,不是这种情况。