webView.canGoBack()始终为false

8

我遇到了一个关于Android Web View的问题。当我在扩展WebViewClient类的类中重写shouldOverrideUrlLoading函数时,WebView.canGoBack()始终返回false

以下是我的代码:

public class SMWebViewClient extends WebViewClient {

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
      view.loadUrl(request.getUrl().toString());
      return true;
   }

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String uri) {
      view.loadUrl(uri);
      return true;
   }
}

在我的活动中:

@BindView(R.id.main_webview) SMWebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...
    webView.setWebViewClient(new SMWebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url){

        }
    });
    webView.clearCache(true);
    webView.clearHistory();
    webView.loadUrl(Constant.baseUrl + Constant.homeUrl);
}

问题在于函数webView.canGoBack(始终在我的活动中)始终返回false
    @Override
    public void onBackPressed() {
       //ALWAYS FALSE
       if (webView.canGoBack()) {
          webView.goBack();
       }
    } 

如果我不覆盖shouldOverrideUrlLoading,则onBackPressed按预期工作。我的代码有什么问题吗?
谢谢
[编辑]: 我也尝试过(没有成功)以这种方式创建webViewClient:
ebView.setWebViewClient(new SMWebViewClient());
2个回答

7
当前版本的Chrome(63+)似乎存在问题。 我下载了Chrome Dev(65+),将默认的webview更改为Chrome Dev 65+,这时可以使用webview.canGoBack()函数。
以下是一些有关错误报告的内容: https://bugs.chromium.org/p/chromium/issues/detail?id=794020 Chrome Dev下载链接: https://play.google.com/store/apps/details?id=com.chrome.dev 更改默认webview: https://www.chromium.org/developers/androidwebview/android-webview-beta 看起来我们需要等待新的Chrome稳定更新。

我还以为我要疯了,谢谢你提供的信息。 - Eugen Timm

2
不要每次在WebClient中加载URL,这会清除WebView的历史记录,还要检查如何将WebView扩展到自己的SMWebView

感谢 @Xenolion 的建议,但是没有任何改变,返回 false。 - fciri
但是你为什么想要设置一个Web客户端? - Xenolion
因为每次你给你的webview一个新的url! - Xenolion
我必须设置WebViewClient来管理加载某些PDF文件。 如果不设置WebViewClient,一切都正常。 - fciri
好的,@Xenolion,我会尽力更好地解释一下。 我扩展了WebView,以便在每个请求中向服务器发送一些Cookie。 我扩展了WebViewClient,以处理返回PDF的某些链接。 问题出在shouldOverrideUrlLoading中:如果我只返回false而不使用view.loadUrl()函数,则历史记录工作良好,但是Cookie将无法发送。如果我使用view.loadUrl(uri),则Cookie被发送,但是历史记录将无法工作。 - fciri
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接