답변:
최신 버전의 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가 언급 한대로 페이지의 다른 코드 및 확장과 공유되지 않기 때문에 실제로 백그라운드 페이지에서 사용하기위한 확실한 솔루션입니다 . 그러나 확장의 경우에는 그렇지 않습니다.