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 wykonać określone czynności? (np. otwórz stronę pomocy lub ustawienia aktualizacji)Wykryj rozszerzenie Chrome najpierw uruchom/aktualizuj
Odpowiedz
Prosty. Po pierwszym uruchomieniu rozszerzenie localStorage
jest puste. Przy pierwszym uruchomieniu można zapisać tam flagę, aby oznaczyć wszystkie kolejne przebiegi jako niebędące pierwszymi.
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!');
EDIT: Aby sprawdzić, czy rozszerzenie właśnie został zaktualizowany, przechowywanie wersji zamiast prostego flagę na pierwszym biegu, a następnie, gdy obecna wersja rozszerzenie (pobierz go przez XmlHttpRequest
w manifeście) nie jest równe temu zapisanemu w localStorage
, rozszerzenie zostało zaktualizowane.
Uważaj, aby tego nie robić w skrypcie treści. localStorage jest współdzielony z innym kodem i rozszerzeniami na stronie. To nie działałoby w skrypcie treści. – huyz
Dla aplikacji pakowanych, jest to rzeczywiście zdecydowane rozwiązanie do użytku na stronach w tle, ponieważ "localStorage" aplikacji pakowanej jest rzeczywiście w osobnym oknie i nie jest udostępniane innym kodom i rozszerzeniom na stronie, o której wspomniała @huyz. W przypadku rozszerzeń tak jednak nie jest. –
** To wymaga jednak pozwolenia na przechowywanie. ** – Pacerier
Jeśli chcesz sprawdzić, czy rozszerzenie zostało zainstalowane lub zaktualizowane, można 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;
}
Jeśli uruchomię getVersion() w skrypcie treści w Gmailu, otrzymam numer wersji aplikacji Gmail. Powinienem wskazać, że istnieje wiele problemów, które uniemożliwią działanie tego typu skryptów: a) podczas instalowania wtyczki, która wymaga wstrzyknięcia skryptu treści na stronę, a strona jest już załadowana, skrypt nie zostanie wprowadzony do strony, strona musi zostać ponownie załadowana).b) uzyskanie numeru wersji wtyczki można wykonać ze skryptu w tle, jednak skrypt w tle nie może uzyskać dostępu do localStorage, tylko skrypt zawartości może, który nie jest jeszcze załadowany ... –
ten wpis jest świetny ... powinieneś oznaczyć to jako odpowiedź. Dzięki Mohamed! – frenetix
@VictorS powyższe jest przeznaczone do użycia na stronie w tle, jeśli planujesz użyć tego w skrypcie treści, po prostu wywołaj bezpośrednio chrome.app.getDetails(). Powodem, dla którego zrobiłem getVersion wcześniej, jest fakt, że w początkach rozwoju rozszerzenia Chrome nie było obiektu chrome.app, więc musieliśmy XHR manifestować. Możesz zrobić to wszystko w zamknięciu, dzięki czemu możesz zagwarantować, że zadzwonisz właściwą metodą. Zwykle otaczam wszystko w obiekcie klasy. –
w nowszych wersjach Chrome (od Chrome 22), można użyć zdarzenia chrome.runtime.onInstalled
, który jest znacznie czystszy.
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 + "!");
}
});
Dziękuję za to! Wszystko, co udało mi się znaleźć w Internecie, to przechowywanie wersji rozszerzenia w localStorage, aż w końcu natknąłem się na tę odpowiedź, co było oczywiście praktycznym rozwiązaniem, ale byłem tak zaskoczony, że chrom nie ma w tym nic wbudowanego! Tak się cieszę, że nie zawiodłem się :) – JMTyler
Od Chrome 22, wydany we wrześniu 2012 r. – Redzarf
chrome.runtime.onInstalled wykrywa, kiedy aplikacja lub rozszerzenie jest zainstalowane w tle. To, czego nie robi, to jednak wykrycie pierwszego uruchomienia zdarzenia chrome.app.runtime.onLaunched ... –
szczęście są teraz events za to (od Chrome w wersji 22 i 25 dla zdarzeń update).
Dla zainstalowanej imprezy:
chrome.runtime.onInstalled.addListener(function() {...});
dla OnUpdateAvailable imprezy:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Ważnym fragmentem o OnUpdateAvailable z docs deweloperskich mówi:
strzały gdy jest aktualizacja dostępne, ale nie jest instalowane natychmiast, ponieważ aplikacja jest aktualnie uruchomiona. Jeśli nic nie zrobisz, aktualizacja zostanie zainstalowana następnym razem, gdy strona w tle zostanie rozładowana, jeśli chcesz, aby była zainstalowana wcześniej, możesz jawnie wywołać chrome.runtime.reload().
- 1. Wykryj fokus przeglądarki/nieostre przez rozszerzenie Google Chrome
- 2. Szyfruj rozszerzenie Chrome?
- 3. Rozszerzenie Chrome: jak utworzyć?
- 4. Rozszerzenie chrome OnMessage
- 5. Pobierz rozszerzenie chrome url
- 6. Rozszerzenie chrome chrome Prosty klient REST
- 7. Rozszerzenie Google Chrome z OAuth
- 8. Rozszerzenie Chrome otrzymuję zaznaczony tekst
- 9. Rozszerzenie Chrome - zapisywanie pliku PDF
- 10. Rozszerzenie Chrome do systemu plików
- 11. Rozszerzenie interfejsu Chrome Historia API
- 12. Rozszerzenie chrome, wysokość okna wyskakującego
- 13. Rozszerzenie Chrome do chmury Amazon
- 14. Wykryj zmianę stylu elementu w chrome
- 15. Rozszerzenie Chrome, które działa, nawet jeśli Chrome jest zamknięty
- 16. Rozszerzenie Chrome kliknij dwukrotnie na słowo
- 17. Pobieranie wielu plików i zip - rozszerzenie Chrome
- 18. Rozszerzenie Chrome do efektywnego blokowania domen
- 19. Rozszerzenie CORS do Chrome z manifestem 2
- 20. Rozszerzenie Chrome obsługuje kopiowanie obrazu do schowka?
- 21. Rozwiń rozszerzenie Chrome bez przekierowania URI
- 22. Rozszerzenie Google Chrome: Kompatybilność z Macami
- 23. rozszerzenie chrome z przechowywaniem w chmurze
- 24. Rozszerzenie Chrome: Modyfikuj DOM przed wczytaniem
- 25. Chrome rozszerzenie: dostęp localStorage w skrypcie zawartości
- 26. Jak debugować rozszerzenie panelu chrome devtools?
- 27. Rozszerzenie Chrome - jak zdobyć ciało odpowiedzi HTTP?
- 28. Rozszerzenie Google chrome nie wyświetla popupu
- 29. Jak mogę sprzedać moje rozszerzenie Google Chrome?
- 30. Rozszerzenie Chrome: Lokalna pamięć masowa, jak wyeksportować
migracja do superuser.com –
niekoniecznie. Myślę, że może to być pytanie programistyczne, jeśli rack1 pisze rozszerzenia chrome. –
dlaczego nie wybrałeś tego? http://stackoverflow.com/a/14957674/4548520 to jest prawo anwser - oficjalne wydarzenie dla pierwszej instalacji rozszerzenia – user25