2013-03-18 4 views
23

Come posso riavviare a livello di codice l'app per PhoneGap? Esco dall'app facilmente tramite navigator.app.exitApp(), ma vorrei riavviare immediatamente.Riavviare la mia app PhoneGap programmaticamente

La ragione per cui ho bisogno di questo, è che devo riavviarlo dopo che l'utente sceglie la sua lingua utente da un menu di selezione. L'i18n si attiva immediatamente dopo che l'utente ha aggiornato la lingua scelta, a parte 5 pulsanti su 1 pagina e un paragrafo su un'altra pagina. Questi 5 elementi rimangono nella lingua precedente (anche la disposizione del menu di selezione della lingua viene completamente distrutta per qualche motivo), ma quando riavvio l'applicazione sono tutti nella lingua corretta. C'è un problema molto complicato con il processo i18n, oppure posso backdoor risolverlo con il riavvio forzato.

Ty, Nutty

+0

se si dispone di una SPA con URL HTML5 di routing, si potrebbe considerare http://stackoverflow.com/a/37837377/82609 –

risposta

31

Io uso il seguente:

location.reload(); 

funziona a meraviglia per me.

Paul

+0

Oooo, ho quasi dimenticato su questa questione, dal momento che questa funzionalità è stato rimosso nella fase 1 Ma sembra funzionare, quindi in una fase successiva potrebbe essere di grande utilità. Thx – NuttySquirrel

+7

Ricarica la pagina indice ma in realtà non chiude e riavvia l'app. Utile nel suo diritto. Tuttavia, mi sto ancora chiedendo se è possibile un riavvio completo ...? – Jason

+1

Ricaricare con un timer è un modo migliore .. –

8

Prova questa

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

Bakri

+0

Il lavoro è perfetto. Grazie! –

+1

Questo è per Android giusto? Cosa succede se ho bisogno di ricaricare l'app ios? quale sarà il percorso per iOS index.html? –

+0

Confermo (come previsto) che funziona solo per Android: D –

4

Questo funziona per iOS e Android (almeno con le versioni 2016 di piattaforma). Funziona anche in applicazioni 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

grazie per il post basta aggiungere una riga dopo window.location = initialHref è quel navigator.splashscreen.hide(); allora funziona perfettamente. – Pritish

+1

@Pritish sarebbe meglio se il hide() fosse chiamato direttamente quando la pagina index.html si ricarica, altrimenti lo splashscreen non sarebbe visibile durante tutto il tempo in cui l'app si riavvia. Ma se funziona bene dipende da come si integra lo splash screen nella propria app –

+0

grazie per la preziosa risposta Farò dei cambiamenti nel codice come da vostri suggerimenti. – Pritish