Saltar al contenido

shouldOverrideUrlLoading en WebView para Android no se está ejecutando

Contamos con tu ayuda para compartir nuestras secciones en referencia a las ciencias de la computación.

Después de investigar un poco, llegué a la conclusión de que, a pesar de lo que dicen la mayoría de los tutoriales, shouldOverrideUrlLoading() no recibe llamadas cuando:

  1. Cargas una URL como

    loadUrl("http://www.google.com");
    
  2. El navegador redirige al usuario automáticamente a través de una redirección HTTP. (Vea el comentario de @hmac a continuación con respecto a las redirecciones)

Sin embargo, lo hace, recibe una llamada cuando hace clic en un enlace dentro de una página web dentro de la vista web. IIRC, la autorización de Twitter usa una redirección HTTP. Qué lástima, esto sería útil si funcionara como dicen todos los tutoriales. Creo que esto es de una versión muy antigua de la API de Android…

Es posible que desee considerar anular el onProgressChanged método de un WebChromeClient como aquí: ¿Cómo escuchar un WebView que termina de cargar una URL? o los onPageFinished() metodo de la WebViewClient.

Encontré lo que creo que es una forma razonable de hacer esto gracias a la respuesta anterior y los comentarios que me indican la dirección correcta.

Lo que hice fue anular onPageStarted y onPageFinished en un WebViewClient personalizado. El código es algo como esto…

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) 
  if (pendingUrl == null) 
    pendingUrl = url;
  


@Override
public void onPageFinished(WebView view, String url) 
  if (!url.equals(pendingUrl)) 
    Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url);
    pendingUrl = null;
  

Y, por supuesto, junto con Log.d, colocaría cualquier código específico que desee ejecutar al detectar la redirección.

Para las personas que tropiezan con esto, cuando el método shouldOverrideUrlLoading(WebView view, WebResourceRequest request) no está siendo llamado, busque su minSdkVersion. Si usa debajo de API 24, debe usar shouldOverrideUrlLoading(WebView view, String url).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *