2011-08-10 90 views
9

我對Android webview有疑問。Android WebView - 在URL重定向上導航

假設一個URL重定向到URL B.

我的時候,它會打開一個URL的Android應用程序,如果一個網址被重定向到其他URL網頁流量自動重定向到URL B.

,我看到這兩個url都存儲在webview歷史記錄中。現在我的webview歷史記錄由[,,URL A,URL B]組成

在返回鍵從URL B網頁點擊時,webview將嘗試加載URL A,該URL又被重定向到URL B.我們需要雙擊返回鍵回到超出URL A

我該如何解決這個問題?從在過去2小時:(

+0

http://stackoverflow.com/questions/11992478/dead-loop-in-android-webview-backkey-for-redirect-href-link這將有助於 –

回答

0

嘗試掙扎超載OnBackPressed()來改變默認的硬鍵回到動作。有ü可以完成當前的活動或控制您希望如何。

+0

沒有得到你。如何知道URL是重定向的URL還是常規的URL?另外,是否可以從webview歷史記錄中刪除特定網址? – Kumar

4
private class HelloWebViewClient extends WebViewClient { 
} 

mWebView.setWebViewClient(new HelloWebViewClient()); 

如果重寫shouldOverrideUrlLoading(),然後返回false。 可能不是正確的方式,但它爲我工作。

+2

這應該是公認的答案。在shouldOverrideUrlLoading()返回true是首先觸發問題的原因,因爲API將它視爲明確的URL負載,將其添加到後端堆棧中,而不將其視爲通用重定向(未添加到後端堆棧中)。 – tinsukE

+0

我同意這應該是被接受的答案。返回'false'會產生預期的結果。 https://developer.android.com/reference/android/webkit/WebViewClient.html –

9

我有同樣的問題太多,而且知道如何解決它。這就像你的。當我點擊第一個鏈接( www.new.a)它會自動重定向其他鏈接(mobile.n ew.a)。通常鏈接重定向兩個或三個,我的解決方案已經在幾乎每個重定向鏈接上工作。我希望這個答案可以幫助你解決annyoing重定向鏈接問題。

我終於想通了。您需要帶有四個API的WebViewClient。在WebViewClient中有shouldOverrideUrlLoading(),onPageStarted(),onPageFinished()和doUpdateVisitedHistory()。所有你需要的API都是API 1,所以不用擔心。

它是這樣的。你可以使用其他函數而不是onKeyUp()。

public class MyWebView extends WebView{ 
    ... 
    private int mRedirectedCount=0; 
    .... 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && this.canGoBack()) { 
      if(mRedirectedCount>0){ 
       while(mRedirectedCount>0){ 
        this.goBack(); 
        mRedirectedCount--; 
       } 
       mRedirectedCount=0; //clear 
      }else{ 
       this.goBack(); 
      } 
     return true; 
    } 

    private class MyWebViewClinet extends WebViewClient{ 
     boolean mIsPageFinished=true; 
     ...  

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      ..... 
      if(mIsPageFinished){ 
       mRedirectedCount=0; //clear count 
      } 
      ..... 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      mIsPageFinished = false; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      mIsPageFinished = true; 
     } 

     @Override 
     public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { 
      super.doUpdateVisitedHistory(view, url, isReload); 

      if(!mIsPageFinished){ 
       mRedirectedCount++; 
      } 
     } 
+0

我使用OnBackPressed()而不是onKeyUp,它不起作用 –

0

我的問題太,現在已經解決了這個問題。

solution

**如果提供WebViewClient,返回true表示主機應用程序處理的URL,而返回false表示當前的WebView處理的URL。 **