WebView Android历史记录中的问题更新Chrome稳定版本63时 [英] Issue in WebView Android History When update Chrome stable version 63

查看:201
本文介绍了WebView Android历史记录中的问题更新Chrome稳定版本63时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Android应用程序 webview 对于Chrome版本61或62可以正常工作,但是当我更新到版本63时,我的 webview 不存储历史和 webView.canGoBack()总是返回 false 。但以前版本的Chrome工作正常。怎么解决?

My Android app webview works fine with chrome version 61 or 62, but when I update to version 63. My webviewdoes not store the history and webView.canGoBack() always returns false. But previous versions of chrome work fine. How to solve?

推荐答案

这个问题应该是铬的错误。我们在应用中发现相同的问题。这个问题的原因是我们在shouldOverrideUrlLoading方法中调用Webview的loadUrl方法,当我们这样做时,webview无法返回到某个版本的chromium中。下面的代码是我的解决方法:

This issue should be chromium's bug. We find out the same issue in our apps. the reason of this issue is we invoke Webview's loadUrl methond in shouldOverrideUrlLoading method, when we do that , webview can't go back in some version of chromium. The code below is my workaround:

public class WebViewBugFixDemo extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // todo : set your content layout

        final WebView webView = (WebView) findViewById(R.id.webview);
        final String indexUrl = "http://www.yourhost.com";
        final String indexHost = Uri.parse(indexUrl).getHost();
        webView.loadUrl(indexUrl);

        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (isSameWithIndexHost(url, indexHost)) {
                    return false;
                }
                view.loadUrl(url);
                return true;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && request != null && request.getUrl() != null) {
                    String url = request.getUrl().toString();
                    if (isSameWithIndexHost(url, indexHost)) {
                        return false;
                    }
                    view.loadUrl(url);
                    return true;
                }
                return super.shouldOverrideUrlLoading(view, request);
            }
        });
    }

    /**
     * if the loadUrl's host is same with your index page's host, DON'T LOAD THE URL YOURSELF !
     * @param loadUrl the new url to be loaded
     * @param indexHost Index page's host
     * @return
     */
    private boolean isSameWithIndexHost(String loadUrl, String indexHost) {
        if (TextUtils.isEmpty(loadUrl)) {
            return false ;
        }
        Uri uri = Uri.parse(loadUrl) ;
        Log.e("", "### uri " + uri) ;
        return uri != null && !TextUtils.isEmpty(uri.getHost()) ? uri.getHost().equalsIgnoreCase(indexHost) : false ;
    }
}

这篇关于WebView Android历史记录中的问题更新Chrome稳定版本63时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆