Webview清空歷史紀錄的正確姿勢

陳明明發表於2017-12-14

跳坑

看到標題首先會想到webview自身應該有個公開方法來起到這個作用,輸入個clear,果然編譯器提示有個clearHistory方法,於是就用了上去。結果完全不起作用啊!只能求助度娘了。各種搜尋查資料,最後終於找到最佳的解決方案。

clearHistory()作用

呼叫方法時,清空當前頁面之前的所有記錄,注意是當前 當前 當前(重要的事情說三遍)也就是說當前的頁面記錄並不會被刪除。這樣的話我從A開啟B同時呼叫該方法,此時當前頁面是A,清空的是A的之前的記錄,A的自身記錄還在。因此要在當前頁面是B的時候呼叫該方法。

解決方案

1.postDelayed 延時呼叫

b.webView.postDelayed(new Runnable() {
    @Override
    public void run() {
        if (IS_NEED_CLAER) { 
           b.webView.clearHistory();
        }
    }
}, 1000);
複製程式碼

這是百度後給出的答案,但延時比較明顯,經常失效。 2.doUpdateVisitedHistory 終極解決方案

@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
    super.doUpdateVisitedHistory(view, url, isReload);
    if (IS_NEED_CLAER) { 
        view.clearHistory();
    }
}
複製程式碼

檢視WebViewClient的幾個回撥方法後,決定在該方法中清空歷史記錄。其他應該也行,比如onPageFinished。

其他

打日誌過程中會發現doUpdateVisitedHistory會被重複呼叫,比對後發現,第二個url的查詢引數的順序被調整過。

相關文章