当前位置:  开发笔记 > 编程语言 > 正文

Android WebView - 导航回URL重定向

如何解决《AndroidWebView-导航回URL重定向》经验,为你挑选了2个好方法。

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



1> theWook..:

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



2> Thanos..:
private class HelloWebViewClient extends WebViewClient {
}

mWebView.setWebViewClient(new HelloWebViewClient());

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


这应该是公认的答案.在shouldOverrideUrlLoading()中返回true是首先触发该问题的原因,因为API将其视为显式URL加载(添加到后台堆栈),不被视为公共重定向(未添加到后台堆栈) ).
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有