2012-03-21 11 views
6

Sto usando WebViewClient. Dovremmo vedere i callback suPageStarted() sempre associati a un callback shouldOverrideUrlLoading()? Se carico example.com nella mia WebView, dovremmo vedere entrambi i metodi richiamati? Dalla documentazione:WebViewClient - onPageStarted() vs shouldOverrideUrlLoading()?

onPageStarted()

notificare l'applicazione host che una pagina è iniziato il caricamento. Questo metodo viene chiamato una volta per ogni frame principale, quindi una pagina con iframe o frameset chiamerà onPageStarted una volta per il frame principale. Ciò significa anche che onPageStarted non verrà chiamato quando i contenuti di un frame incorporato cambiano, ovvero facendo clic su un collegamento il cui target è un iframe.

shouldOverrideUrlLoading()

Dare l'applicazione host la possibilità di prendere il controllo quando un nuovo URL sta per essere caricata nella WebView corrente. Se WebViewClient non viene fornito, per impostazione predefinita WebView chiederà a Activity Manager di scegliere il gestore appropriato per l'url. Se viene fornito WebViewClient, return true significa che l'applicazione host gestisce l'url, mentre return false indica che l'attuale WebView gestisce l'url.

Inserisco un'istruzione di registro in ciascun metodo e vedo che non sono sempre associati insieme. In quali casi non sarebbero?

Grazie

http://developer.android.com/reference/android/webkit/WebViewClient.html

+0

Se si restituisce true su 'shouldOverrideUrlLoading()' allora 'onPageStarted()' non verrà richiamato. Oltre a ciò, potrebbe essere possibile che 'onPageStart' a volte non venga chiamato se ci sono due richieste back to back, quindi potenzialmente impedisce ad una di esse di passare attraverso. Non sono così sicuro di quest'ultimo, però. – Jakar

+0

Secondo i registri che ho ottenuto nella mia applicazione, 'shouldOverrideUrlLoading' e' onPageStarted' possono essere chiamati in qualsiasi ordine, il che è molto confuso. Non ho ancora scoperto in quali circostanze ciò avvenga. – Stan

risposta

1

So che questa domanda è vecchio, ma rispondendo comunque. AFAIK, il shouldOverrideUrlLoading() verrà chiamato per ogni url nella pagina dove come onPageStart() verrà chiamato solo per l'url principale della pagina.

+1

Sembra che tu stia confondendo 'shouldOverrideUrlLoading' con' shouldInterceptRequest'. Il primo è chiamato una sola volta per pagina, il secondo è per ogni richiesta http (se è ciò che hai chiamato "url"). – Stan

Problemi correlati