Webview webBackForwardList 不存储所有 URL 历史记录

Webview webBackForwardList doesn't store all the URL history

最近我得知我的混合 Android 应用程序无法正常工作。

投诉是当他们按下设备上的后退按钮时,它应该返回到之前的网页视图 url。

但它会返回到 url,这就像用户按了两次后退按钮。

所以当我查看日志时

@Override
public void onBackPressed() {
    WebBackForwardList URL = webView.copyBackForwardList();
    for(int i = 0;i < URL.getSize(); i++){
        Log.d("URL list : " + i, URL.getItemAtIndex(i).getUrl());
    }
}

并且使用模拟器,它会显示我输入的 URL 的所有列表。

哪个工作正常

D/URL list : 0: //https://www.blabla.com/ //First webview
D/URL list : 1: //https://www.blabla.com/catalog/category/view/id/999/ //Second webview
D/URL list : 2: //https://www.blabla.com/brand/bla.html //Third webview
D/URL list : 3: //https://www.blabla.com/44444444.html //Fourth webview

但是对于三星 Galaxy S6 这样的真实设备,第三个和第一个网址丢失了。

URL list : 0: //https://www.blabla.com/catalog/category/view/id/999/ //Second webview
URL list : 1: //https://www.blabla.com/44444444.html //Fourth webview

它几周前还工作得很好。
有什么我遗漏的吗?

试试这个:

public static WebBackForwardList getHistoricalList(WebView webView) {
    return webView.copyBackForwardList();
}
@Override
public void onBackPressed() {
    WebBackForwardList URL = getHistoricalList(webView)
    for(int i = 0;i < URL.getSize(); i++){
        Log.d("URL list : " + i, URL.getItemAtIndex(i).getUrl());
    }
}

编码愉快!!

试试这个

@Override
    public void onBackPressed() {
        if(webView.canGoBack())
        {
            webView.goBack();
        }
        else
        {
            super.onBackPressed();
        }
    }

如果 Android 设备安装了 Chrome 版本 63.0.3239.111,webview 的后退列表无法正常工作。禁用或恢复到 Chrome 的早期版本对我有用。但是,该解决方案可能并不适合所有人。在那种情况下,等待 Chrome 的下一个版本并重新测试。祝你好运。