删除WKWebView的cookies信息

自WKWebView出来之后好多app都将沉重的UIWebView换成了WKWebView,其优点大致有以下几点

关于WKWebView特性:
在性能、稳定性、功能方面有很大提升;
允许JavaScript的Nitro库加载并使用(UIWebView中限制);
支持了更多的HTML5特性;
高达60fps的滚动刷新率以及内置手势;
将UIWebView 和 UIWebViewDelegate 重构成了14类与3个协议;

由于需求原因,我们的WKWebView需要经常去清理cookies及相关的缓存

下面的hostStr ,是我们的域名,每次deinit方法时候进行清除相关缓存工作以便于之后运营修改数据之后前台及时更改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if #available(iOS 9.0, *) {
let websiteDataTypes: Set<String> = WKWebsiteDataStore.allWebsiteDataTypes()
WKWebsiteDataStore.default().fetchDataRecords(ofTypes: websiteDataTypes , completionHandler: { (arr) in
for record in arr{
print(record.displayName)
if record.displayName.contains(hostStr){
WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {
print("已删除\(record.displayName)")
})
}
}
})
} else {
let libraryPath = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]
let cookiesFolderPath = libraryPath.appendingFormat("/Cookies")
try? FileManager.default.removeItem(atPath: cookiesFolderPath)
}

我们可以在控制台打印cookies对应的域名,和数据的类型,此方法可以删除特定域名下的cookies

希望能帮助到大家~