美文网首页
WKWebView如何优雅的清除历史记录

WKWebView如何优雅的清除历史记录

作者: 桥下醉翁 | 来源:发表于2020-10-19 10:51 被阅读0次

    需求说明

    • 复用WKWebView需要清除当前网页内容
    • 复用WKWebView需要清除历史记录

    可以想到的原生解决方案

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

    • 首先要清空当前页面内容
    // 效果不是很好的解决方案
    [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) {}
    

    继续优化

    清空当前页面内容的方案,实现的效果并不理想,并非100%清空!!!并非100%清空!!!并非100%清空!!!
    一番扯皮讨论后,我们可以曲线救国,在页面JS上做清空不就很简单了嘛!

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

    程序运行,效果十分棒棒。
    这个时候我就有思路了,能否通过JS清除历史记录呢?
    未完,待续。

    相关文章

      网友评论

          本文标题:WKWebView如何优雅的清除历史记录

          本文链接:https://www.haomeiwen.com/subject/xackmktx.html