Sra*_*van 30 ios ios8 wkwebview
任何人都在使用WKWebview并尝试清除缓存?如果有,该怎么办?举个例子?
PS:正常NSURLCache无效.
Shi*_*ama 52
在iOS 9中
// Optional data
NSSet *websiteDataTypes
= [NSSet setWithArray:@[
WKWebsiteDataTypeDiskCache,
//WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeMemoryCache,
//WKWebsiteDataTypeLocalStorage,
//WKWebsiteDataTypeCookies,
//WKWebsiteDataTypeSessionStorage,
//WKWebsiteDataTypeIndexedDBDatabases,
//WKWebsiteDataTypeWebSQLDatabases,
//WKWebsiteDataTypeFetchCache, //(iOS 11.3, *)
//WKWebsiteDataTypeServiceWorkerRegistrations, //(iOS 11.3, *)
]];
// All kinds of data
// NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
// Date from
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
// Execute
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
// Done
}];
Run Code Online (Sandbox Code Playgroud)
Esq*_*uth 36
Swift版本:
let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache])
let date = Date(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set<String>, modifiedSince: date, completionHandler:{ })
Run Code Online (Sandbox Code Playgroud)
Swift3版本:
if #available(iOS 9.0, *) {
let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache])
let date = NSDate(timeIntervalSince1970: 0)
WKWebsiteDataStore.defaultDataStore().removeDataOfTypes(websiteDataTypes as! Set<String>, modifiedSince: date, completionHandler:{ })
} else {
var libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, false).first!
libraryPath += "/Cookies"
do {
try NSFileManager.defaultManager().removeItemAtPath(libraryPath)
} catch {
print("error")
}
NSURLCache.sharedURLCache().removeAllCachedResponses()
}
Run Code Online (Sandbox Code Playgroud)
我能够通过让我的 WKWebView 评估 window.location.reload 来解决这个问题。我在网络视图上有一个点击手势识别器,每当它检测到两次触摸的双击时,我都会运行以下命令:
webView.evaluateJavaScript("window.location.reload(true)", completionHandler: nil);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
删除缓存和Cookies
# WKWebView+Clean.swift
import WebKit
extension WKWebView {
class func clean() {
guard #available(iOS 9.0, *) else {return}
HTTPCookieStorage.shared.removeCookies(since: Date.distantPast)
WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in
records.forEach { record in
WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {})
#if DEBUG
print("WKWebsiteDataStore record deleted:", record)
#endif
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
例:
import WebKit
...
WKWebview.clean()
Run Code Online (Sandbox Code Playgroud)
仅使用 NSURLCache 无法删除缓存。经过多次尝试,我可以通过以下步骤清除缓存(从 iOS 8.1.1 开始):
Caches中的目录Library。下次创建 WKWebView 时,应该清除缓存。
| 归档时间: |
|
| 查看次数: |
40602 次 |
| 最近记录: |