Android WebView - 导航回URL重定向

时间:2011-08-10 13:03:38

标签: android

我对Android webview有疑问。

假设网址A重定向到网址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小时开始苦苦挣扎:(

4 个答案:

答案 0 :(得分:11)

我也有同样的问题,并想出如何解决它。这就像你的一样。当我点击第一个链接(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++;
            }
        }

答案 1 :(得分:5)

private class HelloWebViewClient extends WebViewClient {
}

mWebView.setWebViewClient(new HelloWebViewClient());

如果覆盖shouldOverrideUrlLoading(),则返回false。 可能不是正确的方法,但它适用于我。

答案 2 :(得分:0)

我也有问题,现在已经解决了问题。

solution

**如果提供了WebViewClient,则返回true表示主机应用程序处理url,而return false表示当前WebView处理url。 **

答案 3 :(得分:-1)

尝试覆盖OnBackPressed()以覆盖默认的硬键返回操作。你可以完成当前的活动或控制你想要的方式。