WebView Android历史记录中的问题更新Chrome稳定版63时

时间:2017-12-12 11:25:50

标签: android google-chrome webview

我的Android应用webview适用于Chrome版本61或62,但是当我更新到版本63时。我的webview不存储历史记录,而webView.canGoBack()始终返回{{1 }}。但以前版本的chrome工作得很好。怎么解决?

2 个答案:

答案 0 :(得分:2)

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

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 ;
    }
}

答案 1 :(得分:0)

即使我正面临这个问题。现在,您可以在ouldOverrideUrlLoading(WebView视图,String url){}函数中使用intent,而super.onbackpressed()将完成其工作以维护历史记录。

public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Intent intent = new Intent(MainActivity.this, MainActivity.class);
            intent.putExtra("postUrl", url);
            startActivity(intent);

            return true;
        }