2011-02-26 9 views
13

Estoy usando WebViewClient.shouldOverrideUrlLoading para captar los clics de cualquier vínculo en WebView. Esto funciona aproximadamente el 95% del tiempo, pero a veces simplemente no se llama.shouldOverrideUrlLoading no funciona/atrapa los clics del enlace mientras se carga la página

me he dado cuenta que en estas tres circunstancias:

  1. Cuando los puntos de enlace a la página que ya están encendidas. Este no es un gran problema, y ​​hay un bug reported for it.
  2. Mientras la página aún se está cargando, si el usuario hace clic en un enlace, rara vez lo atrapa. Simplemente abrirá el enlace sin llamar al shouldOverrideUrlLoading.
  3. Aleatoriamente. Al experimentar con esto en los últimos meses me he dado cuenta de que a veces simplemente no lo capta. Es raro, pero sucede.

Ahora mi pregunta es sobre todo cómo solucionar el problema 2, ya que los otros son menos importantes. Sin embargo, si alguien ha resuelto 1 o 3, me encantaría saberlo.

Además, debo mencionar que he probado diferentes valores de retorno en shouldOverrideUrlLoading y me he dado cuenta de que siempre volviendo cierto parece tener el mejor resultado, pero las cuestiones antes mencionadas siguen sucediendo.

+0

He tenido un problema similar al intentar cambiar la página web con js en la página que modifica 'window.location'. Resulta que la modificación del esquema/protocolo de url hace que la vista web capte 'shouldOverrideUrlLoading'. –

+0

Usted dice, en un comentario sobre la respuesta aceptada, que la causa del problema estaba en su lógica. Nunca mencionas cuál fue el verdadero problema. Tengo este problema, y ​​de google parece que no soy el único. ¿Te importaría reservar un momento y contarnos cómo lo resolviste? – mickey

+0

@mickey, gracias por señalar esto. ¡Lo siento por eso! Escribí una respuesta a continuación. (En las respuestas aceptadas, comentarios) – cottonBallPaws

Respuesta

7

Si el HTML es suyo, puede reemplazar todos los enlaces tradicionales con llamadas a su propio objeto Java, inyectado en el WebView a través del addJavascriptInterface(). Entonces ya no dependerá de shouldOverrideUrlLoading().

De lo contrario, quizás intente evitar que el usuario interactúe con la página hasta onPageFinished().

No me he encontrado con este problema, pero tampoco he usado extensamente WebView con contenido arbitrario.

+0

gracias por las sugerencias. Lamentablemente, el HTML en este caso no es mío y no puedo bloquear al usuario porque algunas páginas se "cargan" durante un tiempo después de que sean bastante utilizables para el usuario. Entonces esa sería una experiencia de IU bastante frustrante. Es casi 100% reproducible para mí.Cargue una url en WebView y mientras se está cargando, presione un enlace, y se salta la llamada de anulación. – cottonBallPaws

+0

Esto terminó siendo un error en alguna lógica que tuve que no capté. Le otorgaré la respuesta porque de todos modos tuvo algunas buenas sugerencias. Gracias. – cottonBallPaws

+1

@littleFluffyKitty ¿Cuáles son los defectos en la lógica de la que está hablando? Deberías escribirlos. – ThomasW

5

Tuve un problema similar al intentar cambiar la página web con js en la página que modifica window.location. Resulta que la modificación del esquema/protocolo de URL hace que la vista web se encuentre en el shouldOverrideUrlLoading. Sé que esto no te ayuda, ya que no posees el HTML, pero pensé que ayudaría a cualquier persona que se tope con este problema.

Cuestiones relacionadas