shouldOverrideUrlLoading non funziona/cattura link click, mentre caricamento della pagina

Sto usando WebViewClient.shouldOverrideUrlLoading per la cattura di qualsiasi collegamento clic nella WebView. Questo funziona a circa il 95% del tempo, ma a volte semplicemente non è chiamato.

Ho notato in questi tre casi:

  1. Quando il link punta alla pagina che sono già su. Questo non è un affare molto grande, e c’è un il bug segnalato per.
  2. Mentre la pagina è ancora in fase di caricamento, se l’utente fa clic su un link, ma non per le catture. Basta aprire il link senza mai chiamare shouldOverrideUrlLoading.
  3. In modo casuale. Durante la sperimentazione con questo sopra l’ultimo paio di mesi ho notato che a volte basta non prenderlo. È raro, ma succede.

Ora la mia domanda è per lo più come risolvere il problema 2, dal momento che gli altri sono meno di un grande affare. Tuttavia, se qualcuno ha risolto o 1 o 3 mi piacerebbe sentire su di esso.

Inoltre, devo dire che ho provato diversi valori di ritorno in shouldOverrideUrlLoading e ho notato che restituisce sempre true sembra avere il miglior risultato, ma i problemi di cui sopra ancora accadere.

  • Ho avuto un problema simile quando si tenta di modificare la pagina web con js nella pagina che modifica window.location. Scopre che modifica l’url scheme/protocollo rende la webview cattura shouldOverrideUrlLoading.
  • Si dice, in un commento sul accettati risposta, che la causa del problema era nella tua logica. Non hai mai parlare di ciò, il vero problema era. Ho questo problema, e da ricerche su google mi sembra non sono l’unico. Ti andrebbe di ricambio per un momento e ci raccontano di come avete risolto?
  • grazie per la precisazione. Mi dispiace! Ho scritto una risposta qui sotto. (Accettate risposte commenti)
  • Np! Peccato però che sembra come se il mio problema non è lo stesso come il tuo… 🙁
  • ciò che sta accadendo per voi? Praticamente come descritto nella presente domanda originale o diverso?
  • Un po ‘ diverso. Ma che cosa hai provato a fare potrebbe aver rivelato essere una soluzione al mio problema. Se avete un momento libero, sei più che benvenuto a leggere la mia domanda rimane senza risposta stackoverflow.com/questions/9147875/… e almeno lasciare un confortante commento 😉



2 Replies
  1. 7

    Se il codice HTML è proprio, è possibile sostituire tutti i tradizionali collegamenti con le chiamate al proprio oggetto Java, iniettato nel WebView via addJavascriptInterface(). Poi potrai più fare affidamento su shouldOverrideUrlLoading().

    Altrimenti, forse, tenta di impedire all’utente di interagire con la pagina fino onPageFinished().

    Non ho eseguito in questo problema, ma non ho fatto ampio uso di WebView con contenuto arbitrario, sia.

    • grazie per i suggerimenti. Purtroppo l’HTML in questo caso non è mia e non posso bloccare l’utente, in quanto alcune pagine sono “carico” per un po ‘ dopo che sono abbastanza usabile per l’utente. In modo che sarebbe abbastanza frustrante interfaccia utente. È molto riproducibile al 100% per me. Caricare un url nella WebView e mentre carica, premere un link di collegamento, e appena salta l’override di chiamata.
    • Questo ha finito per essere un difetto in un po ‘ di logica che ho avuto che non ho capito. Io premio la risposta per voi, perché avete avuto alcuni buoni consigli comunque. Grazie.
    • quali sono i difetti di logica si sta parlando? Si dovrebbe scrivere loro.
    • E ‘ stato un lungo tempo fa, ma sono abbastanza sicuro che ho trovato un posto dove stavo tornando a false. Credo che si deve assolutamente ritornare sempre vero in shouldOVerrideUrlLoading() per evitare questo problema. In questo metodo, se si don ‘ t bisogno di ignorare il carico, basta chiamare la webview.loadUrl(url) invece di restituire false.
  2. 5

    Ho avuto un problema simile quando si tenta di modificare la pagina web con js nella pagina che modifica window.location. Scopre che modifica l’url scheme/protocollo rende la webview cattura shouldOverrideUrlLoading. So che questo non aiuta, perché non si possiede il codice HTML, ma ho pensato che sarebbe utile per chiunque si imbatte in questo problema.

Lascia un commento