WKWebView如何優(yōu)雅的清除歷史記錄

需求說明

  • 復(fù)用WKWebView需要清除當(dāng)前網(wǎng)頁內(nèi)容
  • 復(fù)用WKWebView需要清除歷史記錄

可以想到的原生解決方案

既然是WKWebView,那就查找原生的API吧。

  • 首先要清空當(dāng)前頁面內(nèi)容
// 效果不是很好的解決方案
[self loadHTMLString:@"" baseURL:nil];
// 某度搜索到的方案,可惜我在WKWebView中的代理過濾了about:blank
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]];
  • 然后清空歷史記錄,防止滑動返回帶來的苦惱
    然鵝開放API只讓我找到了self.backForwardList.backList,卻沒有給我清空歷史記錄的操作。
    幸好stackoverflow上有同行與我有同樣的想法。時空隧道
// 我選擇了私有方法,審核通過并未被拒
@try {
        #pragma clang diagnostic push
        #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [weakself.backForwardList performSelector:NSSelectorFromString(@"_removeAllItems")];
        #pragma clang diagnostic pop
    } @catch (NSException *exception) {}

繼續(xù)優(yōu)化

清空當(dāng)前頁面內(nèi)容的方案,實現(xiàn)的效果并不理想,并非100%清空!?。〔⒎?strong>100%清空?。?!并非100%清空?。?!
一番扯皮討論后,我們可以曲線救國,在頁面JS上做清空不就很簡單了嘛!

    DWeakSelf(self);
    [self evaluateJavaScript:@"document.body.innerHTML = '';" completionHandler:^(id result, NSError * _Nullable error) {
    }];

程序運行,效果十分棒棒。
這個時候我就有思路了,能否通過JS清除歷史記錄呢?
未完,待續(xù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容