W jaki sposób rozszerzenie może dowiedzieć się, że jest uruchamiane po raz pierwszy lub właśnie zostało zaktualizowane, aby rozszerzenie mogło wykonywać określone czynności? (np. otwórz stronę pomocy lub zaktualizuj ustawienia)
W jaki sposób rozszerzenie może dowiedzieć się, że jest uruchamiane po raz pierwszy lub właśnie zostało zaktualizowane, aby rozszerzenie mogło wykonywać określone czynności? (np. otwórz stronę pomocy lub zaktualizuj ustawienia)
Odpowiedzi:
W nowszych wersjach Chrome (od Chrome 22) możesz korzystać z chrome.runtime.onInstalled
wydarzenia, które jest znacznie czystsze.
Przykład:
// 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 + "!");
}
});
Zaktualizowana odpowiedź odzwierciedlająca wersję 3 manifestu:
Chromium ma teraz zestaw interfejsów API chrome.runtime , które umożliwiają pobranie wersji rozszerzenia.
Aby uzyskać aktualną wersję:
chrome.runtime.getManifest().version
Aby nasłuchiwać, kiedy rozszerzenie zostało zainstalowane po raz pierwszy, kiedy zostało zaktualizowane do nowej wersji i kiedy Chromium zostało zaktualizowane do nowej wersji, możesz użyć onInstalled
wydarzenia.
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;
}
})
To wszystko!
Stara odpowiedź, sprzed 2011 r
Jeśli chcesz sprawdzić, czy rozszerzenie zostało zainstalowane lub zaktualizowane, możesz zrobić coś takiego:
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'
... sprawdza typeof prevVersion == 'undefined'
. Jest dużo bardziej niezawodne w użyciu typeof
podczas sprawdzania, czy zmienna jest niezdefiniowana ... zobacz tutaj, aby dowiedzieć się, dlaczego: stackoverflow.com/a/3550319/130691
Na szczęście są teraz związane z tym wydarzenia (od wersji Chrome 22 i 25 dla zdarzeń aktualizacji).
W przypadku zainstalowanego wydarzenia:
chrome.runtime.onInstalled.addListener(function() {...});
W przypadku zdarzenia OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Ważny fragment dotyczący OnUpdateAvailable z dokumentacji programisty mówi:
Uruchamiane, gdy aktualizacja jest dostępna, ale nie jest instalowana natychmiast, ponieważ aplikacja jest obecnie uruchomiona. Jeśli nic nie zrobisz, aktualizacja zostanie zainstalowana następnym razem, gdy strona w tle zostanie wyładowana, jeśli chcesz, aby została zainstalowana wcześniej, możesz jawnie wywołać chrome.runtime.reload ().
Prosty. Gdy rozszerzenie jest uruchamiane po raz pierwszy, pole localStorage
jest puste. Przy pierwszym uruchomieniu możesz napisać tam flagę, aby oznaczyć wszystkie kolejne uruchomienia jako nie-pierwsze.
Przykład, w 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!');
EDYCJA: Aby sprawdzić, czy rozszerzenie zostało właśnie zaktualizowane, zapisz wersję zamiast prostej flagi przy pierwszym uruchomieniu, a gdy aktualna wersja rozszerzenia (pobierz ją XmlHttpRequest
z manifestu) nie jest równa tej przechowywanej w localStorage
, rozszerzenie ma został zaktualizowany.
localStorage
się w osobnym oknie i nie jest udostępniana innym kodom i rozszerzeniom na stronie, jak wspomniał @huyz. Jednak w przypadku rozszerzeń tak nie jest.