2011-12-14 2 views
13

C'è un modo per farlo?C'è un modo per aggiornare l'applicazione di PhoneGap - ad esempio, costruire la pagina e iniziare a eseguire gli script dall'inizio?

Ad esempio, se un utente avvia l'app senza connessione Internet, non è possibile caricare script remoti e l'applicazione non può essere eseguita e viene visualizzata una pagina "No Internet". Ma se l'utente ottiene internet più tardi e l'applicazione è ancora in esecuzione, c'è un modo per "riavviare" semplicemente?

risposta

16

come circa -

document.location = "index.html" 

applicazioni PhoneGap sono proprio come un sito Web incorporato - si dovrebbe essere in grado di andare a qualsiasi collegamento ipertestuale che si desidera (mente le whitelist).

Naturalmente, se si desidera rilevare quando è di nuovo online, è necessario utilizzare l'API di PhoneGap Network per collegarsi a tali eventi online/offline.

In generale, hai mai pensato di utilizzare la funzionalità manifest HTML5 per consentire effettivamente all'app PhoneGap locale di memorizzare nella cache gli script remoti? In questo modo la tua app potrebbe ancora funzionare, anche offline (eccetto se ha bisogno di dati remoti per "fare le tue cose") ...

Spero che questo aiuti!

+0

estremamente utile, grazie. non ho preso in considerazione la memorizzazione nella cache degli script - potrebbe funzionare con l'API di google maps? –

+0

il problema principale che chiarisce per me sono errori di timeout javascript. so che c'è stato molto dibattito, ma è chiaro che uiwebview non ha nitro e semplicemente non può eseguire javascript come fa il safari mobile. la mia app jqm ha funzionato perfettamente in safari mobile ma ha continuato a bloccarsi in uiwebview, ma dal momento che phonegap non si riavvia mai realmente e gli errori di javascript non causano l'arresto effettivo della app, questo semplicemente non risponde. document.location fa il trucco per sistemare le cose. –

+0

potrebbe non funzionare se si utilizza il routing html5 per la propria app (poiché index.html potrebbe non essere più relativo). Per questo considerare l'utilizzo di questo: http://stackoverflow.com/a/37837475/82609 –

1

Prova questa

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

Funziona solo per Android. I percorsi dei file possono cambiare. –

0

soluzione accettata funziona, ma potrebbe fallire se si dispone di una SPA con HTML5 URL routing.

Ecco una soluzione più sicura:

// 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; 
}