2013-03-18 27 views
23

Jak mogę programowo ponownie uruchomić moją aplikację? Opuszczam aplikację z łatwością przez navigator.app.exitApp(), ale chciałbym ją natychmiast uruchomić ponownie.Ponownie uruchom moją aplikację Phonegap programowo

Powód, dla którego tego potrzebuję, to konieczność ponownego uruchomienia po wybraniu przez użytkownika języka użytkownika z menu wyboru. I18n natychmiast uruchamia się po tym, jak użytkownik zaktualizował swój wybór języka, oprócz 5 przycisków na 1 stronie i akapitu na innej stronie. Te 5 elementów pozostaje w poprzednim języku (również układ menu wyboru języka zostaje z jakiegoś powodu całkowicie zniszczony), ale kiedy ponownie uruchomię aplikację, wszystkie są w poprawnym języku. Jest albo bardzo skomplikowany problem z procesem i18n, albo mogę go rozwiązać za pomocą wymuszonego restartu.

Ty, orzechowy

+0

jeśli masz SPA z adresami URL html5 routingu, można rozważyć http://stackoverflow.com/a/37837377/82609 –

Odpowiedz

31

używam następujące:

location.reload(); 

działa wspaniale dla mnie.

Paul

+0

Oooo, prawie zapomniałem o tej kwestii, ponieważ ta funkcjonalność jest usuwany w fazie 1 Ale wydaje się, że działa, więc w późniejszej fazie może być bardzo przydatny. Thx – NuttySquirrel

+7

Powoduje to ponowne załadowanie strony indeksu, ale nie zamyka się i nie uruchamia ponownie aplikacji. Przydatne w sobie. Nadal zastanawiam się, czy pełny restart jest możliwy ...? – Jason

+1

Załaduj ponownie z timerem jest lepszy sposób .. –

8

Spróbuj

navigator.app.loadUrl("file:///android_asset/www/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000}); 

Bakri

+0

Work # s perfect. Dzięki! –

+1

To jest dla Androida prawda? Co się stanie, jeśli będę musiał ponownie załadować aplikację ios? jaka będzie ścieżka do iOS index.html? –

+0

Potwierdzam (zgodnie z oczekiwaniami), że działa tylko dla Androida: D –

4

to działa na iOS i Androida (przynajmniej w wersji 2016 Platform). Działa również w aplikacjach SPA.

// keep startup url (in case your app is an SPA with html5 url routing) 
var initialHref = window.location.href; 

function restartApplication() { 
    // Show splash screen (useful if your app takes time to load) 
    navigator.splashscreen.show(); 
    // Reload original app url (ie your index.html file) 
    window.location = initialHref; 
} 
+0

dzięki za post tylko jedna linia trzeba dodać po window.location = initialHref jest to navigator.splashscreen.hide(); to działa idealnie. – Pritish

+1

@Pritish byłoby lepiej, gdyby hide() został wywołany bezpośrednio po przeładowaniu strony index.html, w przeciwnym razie ekran powitalny nie byłby widoczny przez cały czas, gdy aplikacja jest ponownie uruchamiana. Ale jeśli to działa dobrze, to zależy od tego, jak zintegrować ekran powitalny ze swoją własną aplikacją. –

+0

dzięki za cenną odpowiedź wprowadzę zmiany w kodzie zgodnie z Twoimi sugestiami. – Pritish