如何在android中清除webview历史记录

vns*_*tty 28 android webview android-webview

webview的历史还没有清除......下面的代码出了什么问题?

Web视图创建

mWebViewReport=(WebView)findViewById(R.id.report_page);
mWebViewReport.setWebViewClient(new HelloWebViewClient());
mWebViewReport.getSettings().setBuiltInZoomControls(true);
Run Code Online (Sandbox Code Playgroud)

单击帮助按钮时加载帮助文件

mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory();
mWebViewReport.clearCache(true);
Run Code Online (Sandbox Code Playgroud)

单击摘要按钮时加载摘要文件

  mWebViewReport.loadUrl("file:///android_asset/summary.html");

    //On back button click
     if (mWebViewReport.canGoBack()) {
            mWebViewReport.goBack();
            return ;
      }
Run Code Online (Sandbox Code Playgroud)

在这里,我也可以看到帮助页面......

小智 58

在webview加载页面(url)时,您无法清除历史记录,以便清除onPageFinished监听器的历史记录设置,如下所示

在onCreate之前声明一个public var

boolean clearHistory = false;
Run Code Online (Sandbox Code Playgroud)

现在当你声明你的mWebViewReport设置它时

mWebViewReport.setWebViewClient(new WebViewClient(){

    @Override
    public void onPageFinished(WebView view, String url) 
    {
        if (clearHistory)
        {
            clearHistory = false;        
            mWebViewReport.clearHistory();
        }
            super.onPageFinished(view, url);
    }
});
Run Code Online (Sandbox Code Playgroud)

现在当你打电话给你的帮助网址时,清除历史记录只需将clearHistory设置为true即可

mWebViewReport.loadUrl("file:///android_asset/help.html");
mWebViewReport.clearHistory();  // REMOVE THIS LINE
mWebViewReport.clearCache(true); // REMOVE THIS LINE
clearHistory = true; // ADD THIS LINE
Run Code Online (Sandbox Code Playgroud)


abh*_*nav 9

我想,clearHistory()清除了back and forward list.因此,当前加载的URL仍将保留在后面的列表中.

  • 那么?..这不可能吗? (3认同)

Chr*_*rff 6

Osama_Almaani的解决方案非常好用!您可以通过将标志移动到WebViewClient实现来优化代码.

在您的活动中定义一个字段并使用它而不是匿名声明:

private MyWebViewClient myWebViewClient = new MyWebViewClient();
...
myWebView.setWebViewClient(myWebViewClient);
Run Code Online (Sandbox Code Playgroud)

使用新方法clearHistory()增强WebViewClient类:

private class MyWebViewClient extends WebViewClient {
  private boolean clearHistory = false;

  /**Use this instead of WebView.clearHistory(). */
  public void clearHistory(){
    clearHistory = true;
    }

  @Override
  public void onPageFinished(WebView view, String url) {
    if(clearHistory){
      Log.d(TAG, "clearHistory now");
      clearHistory = false;
      myWebView.clearHistory();
    }
    super.onPageFinished(view, url);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用这个新方法:

myWebViewClient.clearHistory();
mWebViewReport.loadUrl("file:///android_asset/help.html");
Run Code Online (Sandbox Code Playgroud)