需求说明
- 复用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清除历史记录呢?
未完,待续。
网友评论