2010-11-01 15 views
84

Así que ahora, en mi aplicación, la URL a la que estoy accediendo tiene una redirección, y cuando esto suceda WebView abrirá un nuevo navegador, en lugar de permanecer en mi aplicación ¿Hay alguna manera de que pueda cambiar la configuración para que la Vista redirija a la URL como lo hace normalmente, pero quédese en mi aplicación en lugar de abrir un nuevo navegador?Android WebView, cómo manejar los redireccionamientos en la aplicación en lugar de abrir un 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 observe cómo redirigirá la URL al producto real. En mi aplicación, si lo abro en un nuevo navegador, funcionará muy bien; sin embargo, si lo mantengo en mi aplicación con WebView, aparecerá como si estuviera buscando k = 9780735622777, así: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0. O bien, abrirá la vista en el navegador y mostrará lo que sea apropiado. Sin embargo, quiero mantener todo en mi aplicación.

Respuesta

206

Cree un WebViewClient y anule el 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 
    } 
}); 
+0

¿Cómo funcionaría esto si no sé la URL de carga? – James

+0

lea la respuesta editada. – xandy

+4

Funciona perfectamente, gracias por esto :) – craigp

12

De acuerdo con la documentation oficial, un clic en cualquier enlace en WebView lanza una aplicación que gestiona las direcciones URL, que por defecto es un navegador. Necesita anular el comportamiento por defecto como éste

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return false; 
     } 
    }); 
+4

Mejor aún, solo llame a myWebView.setWebViewClient (nuevo WebViewClient()); La implementación predeterminada de shouldOverrideUrlLoading devuelve falso. – cyroxis

6

Simplemente añadiendo un defecto personalizada WebViewClient va a hacer. Esto hace que WebView maneje las URL cargadas.

mWebView.setWebViewClient(new WebViewClient()); 
1

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

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ñada 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() { 
     // 
     // 
    } 

Download demo

4

Usted tendrá que configurar su WebviewClient encargo anulando shouldOverrideUrlLoading método para su vistaweb antes de cargar la url.

mWebView.setWebViewClient(new WebViewClient() 
     { 
      @SuppressWarnings("deprecation") 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView webView, String url) 
      { 
       return shouldOverrideUrlLoading(url); 
      } 

      @TargetApi(Build.VERSION_CODES.N) 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request) 
      { 
       Uri uri = request.getUrl(); 
       return shouldOverrideUrlLoading(uri.toString()); 
      } 

      private boolean shouldOverrideUrlLoading(final String url) 
      { 
       Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url); 

       // Here put your code 

       return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false. 
      } 
     }); 

Pedido el código de ejemplo para el manejo de las URL de redireccionamiento y abierta pdf sin descarga, en vista web. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

+0

Tenga en cuenta que el enlace anterior para un código de ejemplo no existe. – Jetdog

+0

he cargado el enlace. –

Cuestiones relacionadas