Android WebView, come gestire i reindirizzamenti in app invece di aprire un browser

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

  •  28-09-2019
  •  | 
  •  

Domanda

Quindi, in questo momento nella mia app URL sto accedendo ha un reindirizzamento, e quando questo accade il WebView si aprirà un nuovo browser, invece di stare nella mia app. C'è un modo per modificare le impostazioni in modo che il Vista reindirizzerà alla URL del tipo normale, ma soggiorno nella mia app, invece di aprire un nuovo browser?

Modifica:

Voglio l'URL di reindirizzamento, solo che non so come crearlo, quindi l'unico modo per arrivare a quel URL è attraverso quella che causerà un redirect a quello che voglio.

Ad esempio: Quando andate qui: http: // www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 preavviso come andrà a reindirizzare l'URL al prodotto reale. Nella mia app, se l'apro in un nuovo browser, lo farà bene, se lo tengo nella mia app con una WebView, verrà visualizzato come se si sta facendo una ricerca per k = 9.780.735,622777 millions, in questo modo: http://www.amazon.com / gp / p / s / ref = is_s_? k = k% 3D9780735622777 & x = 0 & y = 0 . O, si aprirà la vista nel browser e mostrare ciò che è appropriato. Tuttavia, voglio tenere tutto nella mia app.

È stato utile?

Soluzione

Crea una WebViewClient, e ignorare il metodo 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
   }
});

Altri suggerimenti

Secondo il , un clic su qualsiasi link lanci WebView un'applicazione che gestisce gli URL, che di default è un browser. È necessario ignorare il comportamento predefinito come questo

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

Basta aggiungere un WebViewClient predefinito personalizzato farà. Questo rende l'impugnatura WebView eventuali stesso caricati URL.

mWebView.setWebViewClient(new WebViewClient());

Si dovrà impostare il WebviewClient personalizzato sovrascrivendo shouldOverrideUrlLoading metodo per il WebView prima di caricare l'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.
            }
        });
  

Acquista il codice di esempio per la gestione di URL di reindirizzamento e PDF aperto senza scaricare, in WebView.    https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

Creare una classe che implementa webviewclient e aggiungere il seguente codice che permette ovveriding la stringa URL come illustrato di seguito. È possibile vedere questi esempio

public class myWebClient extends WebViewClient {

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

Sul costruttore, creare un oggetto WebView come illustrato di seguito.

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

quindi aggiungere il seguente codice per eseguire il caricamento di URL all'interno della vostra app

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

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

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

Scarica demo

Si prega di utilizzare il sottostante Codice Kotlin

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

Per maggiori info clicca qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top