web-dev-qa-db-de.com

Android WebView, wie man mit Weiterleitungen in der App umgeht, anstatt einen Browser zu öffnen

Im Moment hat die URL, auf die ich zugreife, in meiner App eine Umleitung. In diesem Fall öffnet das WebView einen neuen Browser, anstatt in meiner App zu bleiben. Kann ich die Einstellungen so ändern, dass die Ansicht wie gewohnt zur URL umleitet, aber in meiner App bleibt, anstatt einen neuen Browser zu öffnen?

Bearbeiten:

Ich möchte die Weiterleitungs-URL. Ich weiß nur nicht, wie ich sie erstellen soll. Der einzige Weg, um zu dieser URL zu gelangen, ist einer, der eine Weiterleitung zu der gewünschten URL bewirkt.

Beispiel: Wenn Sie hierher gehen: http://www.Amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 Beachten Sie, wie die URL zum tatsächlichen Produkt umgeleitet wird. Wenn ich es in meiner App in einem neuen Browser öffne, ist das in Ordnung. Wenn ich es jedoch in meiner App mit einer WebView behalte, wird es so angezeigt, als würde nach k = 9780735622777 gesucht: http://www.Amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y= . ODER, es öffnet die Ansicht im Browser und zeigt an, was angemessen ist. Ich möchte jedoch alles in meiner App behalten.

105
James

Erstellen Sie einen WebViewClient und überschreiben Sie die Methode 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
   }
});
232
xandy

Laut der offiziellen Dokumentation startet ein Klick auf einen Link in WebView eine Anwendung, die URLs verarbeitet, die standardmäßig ein Browser ist. Sie müssen das Standardverhalten wie folgt überschreiben

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

Das Hinzufügen eines benutzerdefinierten WebViewClient reicht aus. Dadurch kann das WebView alle geladenen URLs selbst verarbeiten.

mWebView.setWebViewClient(new WebViewClient());
13
Till

Sie müssen Ihre benutzerdefinierte WebviewClient-Überschreibungsmethode shouldOverrideUrlLoading für Ihre Webansicht festlegen, bevor Sie die URL laden können.

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.
            }
        });

Überprüfen Sie den Beispielcode für die Verarbeitung von Weiterleitungs-URLs und öffnen Sie PDF ohne Download, in der Webansicht. https://Gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf495

7
Ashish Das

Erstellen Sie eine Klasse, die den Webviewclient implementiert, und fügen Sie den folgenden Code hinzu, der das Überschreiben der URL-Zeichenfolge wie unten gezeigt ermöglicht. Sie können diese sehen Beispiel

public class myWebClient extends WebViewClient {

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

Erstellen Sie in Ihrem Konstruktor ein Webview-Objekt wie unten gezeigt.

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

Fügen Sie dann den folgenden Code hinzu, um das Laden von URLs in Ihre App durchzuführen

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

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

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

Demo herunterladen

2
Daniel Nyamasyo

Bitte benutzen Sie den folgenden Kotlin-Code

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

Für weitere Informationen klicken Sie auf hier

0
Shalu T D