Android,如何从 WebView 检索重定向 URL?

问题描述 投票:0回答:6

首先我上网冲浪,但没有找到符合我情况的答案。 我想从网络视图中获取特定的重定向网址,然后阻止网络视图打开它。该案例是用户授权我的应用程序后的 Instagram 重定向网址。怎么做?这是我的代码:

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.setWebViewClient(new WebViewClient());
    webView.loadUrl("https://api.instagram.com/oauth/authorize/?client_id=my_client_id&redirect_uri=my_redirect_uri&response_type=code");
android webview
6个回答
3
投票

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

mWebView.loadUrl("Your URL");

查看用于在 Web 视图中处理重定向 URL 并无需下载即可打开 PDF 的示例代码。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500


2
投票

您应该重写shouldOverrideUrlLoading:

webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView wView, String url) {

               if (url.indexOf('api.instagram.com') > -1) //check if that's a url you want to load internally
               {
                    webView.loadUrl(url);
                    return true;
               }
               else
               {
                    return false; //Let the system handle it
               }                
        }
 });

1
投票

最后感谢Udi对我的问题的回答,经过一点改变,我设法找到了问题的解决方案。这是对我有用的代码:

    webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView wView, String url) {
               return (url.indexOf("some part of my redirect uri") > -1);                               
        }       
    });
    webView.loadUrl(myUrl); //myUrl is the initial url.

使用上面的代码,如果有任何url包含redirect uri,webView将不会加载它。否则,webView 将加载它。还要感谢卡米尔·卡明斯基。


0
投票

只需为您的

WebViewClient
设置
WebView
,然后覆盖
shouldOverrideUrlLoading
中的
WebViewClient
。在该方法中,您可以获取您的网址,并决定您的
WebView
是否应遵循重定向网址。例子如下:

  webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // here you can assign parameter "url" to some field in class

            // return true if you want to block redirection, false otherwise
            return true;
        }
    });

0
投票

您可以比较 URL 字符串/特定单词,并采取相应的操作 -

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                super.shouldOverrideUrlLoading(view, url);

if (url.contains(".pdf")
openPDF(url); // handle pdf opening

if(url.startsWith("tel:")
callNumber(url); // handle call processing
...
}

仅添加更多内容,您可以阻止 webview 显示传统的错误消息屏幕,或绕过已知错误 -

 @Override
                public void onReceivedError(WebView view, int errorCode,
                        String description, String failingUrl) {
                    if (errorCode == -10) {
                        System.out.println("Error occured: Error code: "
                                + errorCode + "..Ignoring this error");
                        return;
                    }
                    else
                    {
                     // Show your custom screen to notify error has occured
                    }
    ...
    }

0
投票

解决WebView中重定向URL问题可以参考这个答案

https://stackoverflow.com/a/76863876/22360721

© www.soinside.com 2019 - 2024. All rights reserved.