Android WebView,如何处理应用程序中的重定向而不是打开浏览器

Jam*_*mes 106 android android-webview

所以现在在我的应用程序中我正在访问的URL有一个重定向,当发生这种情况时,WebView将打开一个新的浏览器,而不是留在我的应用程序中.有没有办法可以更改设置,以便View像正常一样重定向到URL,但是留在我的应用程序而不是打开新的浏览器?

编辑:

我想要重定向URL,我只是不知道如何创建它,所以获取该URL的唯一方法是通过一个导致重定向到我想要的URL.

例如:当您访问此处时:http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777,注意它如何将URL重定向到实际产品.在我的应用程序中,如果我在新的浏览器中打开它,它会很好地做到这一点,但是如果我用WebView将它保存在我的应用程序中,它将显示为正在搜索k = 9780735622777,如下所示:http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0.或者,它将在浏览器中打开视图并显示适当的内容.但是,我想在我的应用程序中保留所有内容.

xan*_*ndy 236

创建WebViewClient,并覆盖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
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 请不要复制上面的代码.从回调返回false而不是调用view.loadUrl.调用loadUrl会引入一个微妙的错误,如果你在页面中有任何iframe,并带有自定义方案URL(比如说<iframe src ="tel:123"/></iframe>),它会将你应用程序的主框架导航到最有可能破坏应用程序的URL副作用. (15认同)
  • 我喜欢像方法一样的答案(){//只是把你不知道如何使用的代码放在这里} (5认同)

abb*_*bas 18

根据官方文档,单击WebView中的任何链接都会启动一个处理URL的应用程序,默认情况下该URL是一个浏览器.您需要覆盖这样的默认行为

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

  • 更好的方法是调用myWebView.setWebViewClient(new WebViewClient()); shouldOverrideUrlLoading的默认实现返回false. (7认同)

Til*_*ill 13

只需添加默认自定义即可WebViewClient.这使得WebView可以处理任何已加载的URL本身.

mWebView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)


Ash*_*Das 7

在加载URL之前,您必须为webview 设置自定义WebviewClient覆盖shouldOverrideUrlLoading方法.

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.
            }
        });
Run Code Online (Sandbox Code Playgroud)

在webview中查看用于处理重定向网址的示例代码,无需下载即可打开PDF. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500