Android WebView, cómo manejar las redirecciones de aplicación en lugar de abrir un navegador

StackOverflow https://stackoverflow.com/questions/4066438

  •  28-09-2019
  •  | 
  •  

Pregunta

Así que ahora mismo en mi aplicación de la URL que estoy accediendo tiene una redirección, y cuando esto sucede, la vista Web se abrirá un nuevo navegador, en lugar de quedarse en mi aplicación. ¿Hay alguna manera de cambiar la configuración para la vista redirigirá a la URL como normal, pero la estancia en mi aplicación en lugar de abrir un nuevo navegador?

Editar:

Quiero la URL de redireccionamiento, sólo que no sé cómo crearla, por lo que la única manera de llegar a esa URL es a través de uno que hará que una redirección a la que quiero.

Por ejemplo: Cuando vaya aquí: http: // www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 aviso de cómo se va a redirigir la dirección URL del producto real. En mi aplicación, si lo abro en un nuevo navegador, que hará que muy bien, sin embargo, si lo guardo en mi aplicación con una vista Web, se mostrará como si estuviera haciendo una búsqueda para k = 9780735622777, de esta manera: http://www.amazon.com / gp / aw / s / ref = is_s_? k = k% 3D9780735622777 y x = 0 y y = 0 . O, se abrirá la vista en el navegador y mostrar lo que es apropiado. Sin embargo, quiero mantener todo en mi aplicación.

¿Fue útil?

Solución

Crea un WebViewClient, y anular la método shouldOverrideUrlLoading .

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        view.loadUrl(url);
        return false; // then it is not handled by default action
   }
});

Otros consejos

Simplemente añadiendo una WebViewClient personalizado predeterminado va a hacer. Esto hace que el mango WebView ningún sí urls cargados.

mWebView.setWebViewClient(new WebViewClient());

Crear una clase que implementa webviewclient y añada el siguiente código que permite ovveriding la cadena de URL, como se muestra a continuación. Se puede ver estos ejemplo

public class myWebClient extends WebViewClient {

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url); 
         return true;
     }
}

En el constructor, cree un objeto en vista web como se muestra a continuación.

   web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

A continuación, añadir el siguiente código para realizar la carga de las direcciones URL dentro de su aplicación

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 

 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }

Descargar demostración

Por favor use el siguiente código Kotlin

webview.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {   
                view.loadUrl(url)
                return false 
            }
        })

Para obtener más información haga clic aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top