hacer - javascript webview android
shouldOverrideUrlLoading en WebView para Android no se está ejecutando (2)
Después de algunas investigaciones, llegué a la conclusión de que, a pesar de lo que dicen la mayoría de los tutoriales, shouldOverrideUrlLoading()
no ser llamado " shouldOverrideUrlLoading()
cuando:
Carga una URL como
loadUrl("http://www.google.com");
El navegador redirige al usuario automáticamente a través de una redirección HTTP. (Ver el comentario de @hmac a continuación sobre redirecciones)
Sin embargo , sí recibe llamadas cuando hace clic en un enlace dentro de una página web dentro de la vista web. IIRC, la autorización de Twitter utiliza un redireccionamiento de HTTP .. Bummer, 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 método onProgressChanged
de un WebChromeClient
como aquí: ¿Cómo escuchar un WebView cuando se carga una URL? o el método onPageFinished()
del WebViewClient
.
-Editar: Solución encontrada-
Lo descubrí después de una búsqueda exhaustiva: una persona (literalmente quiero decir una) dijo que en su lugar usaba onPageLoad (); que funcionó perfectamente para mis propósitos. La diferencia es que onPageLoad () se ejecuta más tarde que debería OverrideUrlLoading, pero no hace una diferencia en mi código.
Estoy tratando de configurar la autorización de Twitter con OAuth para una aplicación de Android, y hasta ahora puedo enviar al usuario con éxito a la URL de autorización, sin embargo, lo que estoy tratando de hacer ahora es interceptar el redireccionamiento a la devolución de llamada Si se produce un error 404, nuestra URL de devolución de llamada no tendrá una página asociada en nuestros servidores). Lo que estoy intentando hacer es verificar si la URL es nuestra devolución de llamada, luego extraer el Verificador de OAuth de la URL. Configuré mi WebView con este código:
view = (WebView)findViewById(R.id.twitterWbVw);
view.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView wView, String url)
{
String urlHolder;
String[] verifExtrctr;
urlHolder = url.substring(0, url.indexOf(''?''));
System.out.println("url");
if(urlHolder.equalsIgnoreCase(CALLBACK_URL))
{
verifExtrctr = urlHolder.split("?");
verifExtrctr = verifExtrctr[2].split("=");
if(verifExtrctr[0].equalsIgnoreCase("oauth_verifier"))
{
params[5] = verifExtrctr[1];
return true;
}
else
{
System.out.println("Inocorrect callback URL format.");
}
}
else
{
wView.loadUrl(url);
}
return true;
}
});
view.loadUrl(urlAuthorize.toExternalForm());
La cosa es incluso System.out.println ("url"); (que estoy usando para depurar) no se ejecuta! Así que estoy bastante seco con las ideas y no puedo encontrar a nadie con un problema similar. La URL de autorización está bien, y puedo autorizar la aplicación con éxito, sin embargo, la redirección a la URL de devolución de llamada por alguna razón nunca se intercepta. Cualquier ayuda sería apreciada, esto está en mi onResume () si eso importa.
He encontrado lo que creo que es una forma razonable de hacerlo 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 va 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 el Log.d, pondría cualquier código específico que desee ejecutar al detectar el redireccionamiento.