Android WebView - 导航回URL重定向

Kum*_*mar 10 android

我对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小时苦苦挣扎:(

the*_*ook 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++;
            }
        }
Run Code Online (Sandbox Code Playgroud)


Tha*_*nos 6

private class HelloWebViewClient extends WebViewClient {
}

mWebView.setWebViewClient(new HelloWebViewClient());
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是公认的答案.在shouldOverrideUrlLoading()中返回true是首先触发该问题的原因,因为API将其视为显式URL加载(添加到后台堆栈),不被视为公共重定向(未添加到后台堆栈) ). (5认同)

小智 -1

尝试重载 OnBackPressed() 以覆盖默认的硬键后退操作。在那里你可以完成当前的活动或控制你想要的方式。