我对Android webview有疑问.
假设URL A重定向到URL B.
我的android应用程序在尝试打开URL A时,webview会自动重定向到URL B.
如果将URL重定向到某个其他URL,我会看到这两个URL都存储在webview历史记录中.现在我的webview历史记录包含[,,URL A,URL B]
在从URL B网页返回密钥后,webview将尝试加载URL A,再次重定向到URL B.我们需要双击后退键以返回URL A之外
我该如何解决这个问题?从过去2小时苦苦挣扎:(
我也有同样的问题,并想出如何解决它.这跟你的一样.当我点击第一个链接(www.new.a)时,它会自动重定向其他链接(mobile.new.a).通常链接重定向两个或三个,我的解决方案几乎在每个重定向链接上都有效.我希望这个答案可以帮助你解决重定向链接问题.
我终于想通了.您需要一个包含四个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++; } }
private class HelloWebViewClient extends WebViewClient { } mWebView.setWebViewClient(new HelloWebViewClient());
如果覆盖shouldOverrideUrlLoading()
,则返回false.可能不是正确的方式,但它适用于我.