Wie kann eine Erweiterung feststellen, dass sie zum ersten Mal ausgeführt wird oder gerade aktualisiert wurde, damit die Erweiterung bestimmte Aktionen ausführen kann? (zB eine Hilfeseite öffnen oder Einstellungen aktualisieren)
Wie kann eine Erweiterung feststellen, dass sie zum ersten Mal ausgeführt wird oder gerade aktualisiert wurde, damit die Erweiterung bestimmte Aktionen ausführen kann? (zB eine Hilfeseite öffnen oder Einstellungen aktualisieren)
Antworten:
In neueren Versionen von Chrome (seit Chrome 22) können Sie das chrome.runtime.onInstalled
Ereignis verwenden, das viel sauberer ist.
Beispiel:
// 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 + "!");
}
});
Aktualisierte Antwort entsprechend Version 3 des Manifests:
Chromium verfügt jetzt über eine Reihe von APIs für chrome.runtime , mit denen Sie die Version der Erweiterung abrufen können .
So erhalten Sie die aktuelle Version:
chrome.runtime.getManifest().version
Um zuzuhören, wann die Erweiterung zum ersten Mal installiert wurde, wann die Erweiterung auf eine neue Version aktualisiert wurde und wann Chromium auf eine neue Version aktualisiert wurde, können Sie das onInstalled
Ereignis verwenden.
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;
}
})
Das ist alles!
Alte Antwort vor 2011
Wenn Sie überprüfen möchten, ob die Erweiterung installiert oder aktualisiert wurde, können Sie Folgendes tun:
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'
... er überprüft typeof prevVersion == 'undefined'
. Es ist viel robuster zu verwenden, typeof
wenn überprüft wird, ob eine Variable undefiniert ist ... siehe hier, um zu erfahren, warum: stackoverflow.com/a/3550319/130691
Glücklicherweise gibt es jetzt Ereignisse dafür (seit Chrome Version 22 und 25 für Aktualisierungsereignisse).
Für ein installiertes Ereignis:
chrome.runtime.onInstalled.addListener(function() {...});
Für ein OnUpdateAvailable-Ereignis:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Ein wichtiger Auszug über OnUpdateAvailable aus den Entwicklerdokumenten lautet:
Wird ausgelöst, wenn ein Update verfügbar ist, wird jedoch nicht sofort installiert, da die App derzeit ausgeführt wird. Wenn Sie nichts tun, wird das Update beim nächsten Entladen der Hintergrundseite installiert. Wenn Sie möchten, dass es früher installiert wird, können Sie chrome.runtime.reload () explizit aufrufen.
Einfach. Wenn die Erweiterung zum ersten Mal ausgeführt wird, localStorage
ist sie leer. Beim ersten Lauf können Sie dort ein Flag schreiben, um alle nachfolgenden Läufe als nicht zuerst zu markieren.
Beispiel in 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!');
BEARBEITEN: Um zu überprüfen, ob die Erweiterung gerade aktualisiert wurde, speichern Sie die Version beim ersten Ausführen anstelle eines einfachen Flags. Wenn die aktuelle Erweiterungsversion (erhalten Sie sie über XmlHttpRequest
das Manifest) nicht der gespeicherten Version entspricht localStorage
, hat die Erweiterung wurde aktualisiert.
localStorage
Tat in einem eigenen separaten Fenster befinden und nicht mit anderen Codes und Erweiterungen auf der Seite geteilt werden, wie @huyz erwähnt. Bei Erweiterungen ist dies jedoch nicht der Fall.