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

时间:2015-09-30 16:51:15

标签: android webview

首先我浏览网页,但没有找到符合我案例的答案。 我想从webview中获取特定的重定向URL,然后保持webview不打开它。在用户授权我的应用程序后,该案例是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");

5 个答案:

答案 0 :(得分:3)

在加载网址之前,您必须设置自定义WebviewClient覆盖webview的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");
  

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

答案 1 :(得分: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
               }                
        }
 });

答案 2 :(得分:1)

最后感谢Udi I对我的问题给出的答案,稍作改动,我设法找到问题的解决方案。以下代码对我有用:

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

使用上面的代码,如果有任何包含重定向uri的url,webView将无法加载它。否则,webView将加载它。还要感谢卡米尔卡明斯基。

答案 3 :(得分: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;
        }
    });

答案 4 :(得分:0)

您可以比较网址字符串/特定字词,并据此采取相应措施 -

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