2015-03-10 27 views
10

C'è un tag asset Javscript remoto su una pagina HTML locale che sto navigando su WkWebView che non finisce mai di scaricare (nel caso in cui il dispositivo iOS non sia connesso a Internet, o Internet del dispositivo è troppo lento).WKWebView non termina/timeout quando non c'è accesso a Internet

Purtroppo, il WKWebView non interrompe il tentativo di scaricare questo bene né mai passare alla mia WKNavigationDelegate (cioè né -webView:didFailNavigation:withError:-webView:didFinishNavigation: neither sono chiamati), quindi gli utenti sono bloccati con una pagina HTML vuota che mai risolve completamente e mai errori su.

Fortunatamente in alcuni scenari ho eseguito il debugging tramite il debugger JavaScript iOS remoto di iOS, ho notato che abbiamo ricevuto l'errore Failed to load resource: The Internet connection appears to be offline nella console, ma in altri (come alcuni dispositivi in ​​Modalità aereo) il WKWebView non sembra mai timeout con questo errore o rinuncia, quindi nessun callback WKNavigationDelegate viene attivato.

È possibile riprodurre questo scenario da soli utilizzando il simulatore iOS 8.2 con qualsiasi applicazione iOS WKWebView, accedere a qualsiasi file HTML fornito localmente, quindi aggiungere un tag script con qualsiasi URL remoto, quindi limitare la connessione Internet a "100 % Loss "utilizzando Apple Network Link Conditioner.

Quale sarebbe il modo migliore per forzare un WkWebView a timeout/ritorno tramite un errore o una richiamata di successo al suo WKNavigationDelegate?

risposta

0

Penso che dovrai farlo nella tua pagina HTML. È possibile includere un piccolo JavaScript che esegue un timer e controlla se lo script remoto è stato caricato o meno.

Se non è stato caricato, il codice JavaScript può mostrare un errore nella pagina direttamente o notificare l'applicazione tramite un gestore di messaggi di script.

(non credo HTML ha un API che una pagina può utilizzare per scoprire errori di caricamento dei contenuti Ci sono alcuni suggerimenti su che in Verify External Script Is Loaded.)

+0

Come faccio a verificare in Javascript per vedere se un tag HTML dello script remoto ha terminato il caricamento? Lo script remoto esegue tutto in una funzione immediatamente invocata, quindi non ci sono variabili globali che posso verificare per l'esistenza di. – depthfirstdesigner

13

Prova:

WKNavigationDelegate

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error 

È possibile controllare l'errore, di solito si avrà un error.code -1009:

Controlla questo elenco: Error Codes

+1

Questa dovrebbe essere la risposta accettata. – superpuccio

+2

-1 Questo metodo non verrà chiamato per un tempo molto lungo e quindi non una risposta. Ho visto un minuto prima che venga chiamato '-webView :: didFinishNavigation:'. La vera domanda OP è nell'ultimo paragrafo. – David

+1

Errore per me quasi istantaneamente in modalità aereo; upvoted. –

Problemi correlati