2015-09-30 57 views
1

首先我瀏覽了網頁,但沒有找到與我的案例相匹配的答案。 我想從web視圖抓取一個特定的重定向url,然後讓webview打開它。這個案例是在用戶授權我的應用之後的一個Instagram重定向網址。怎麼做?這裏是我的代碼:Android,如何從WebView中檢索重定向URL?

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"); 

回答

0

最後多虧了烏迪我給我的問題,有一點變化了答案,我設法找到一個解決問題的辦法。這裏是爲我工作的代碼:

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,web視圖不會加載它。否則,webView將加載它。還要感謝Kamil Kaminski。

0

只需設置WebViewClient爲您WebView,並在WebViewClient覆蓋shouldOverrideUrlLoading。在這種方法中,你可以抓住你的網址,並決定你的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; 
     } 
    }); 
1

您應該重寫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 
       }     
     } 
}); 
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 
        } 
    ... 
    } 
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"); 

結帳處理重定向URL和打開的PDF不用下載,web視圖中的示例代碼。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500