2011-08-10 55 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。 **