WKWebView如何清除緩存
iOS7.0只有UIWebView, 而iOS8.0是有WKWebView蚁飒, 但8.0的WKWebView沒有刪除緩存方法后裸。iOS9.0之后就開始支持啦。
所以使用時候一定要適配iOS9.0以上
適用場景
清除WKWebView的緩存拄养,讓H5頁面一刷新就更新至最新的頁面
選擇在合適邏輯加上以下代碼:
清除所有的緩存
- (void)deleteWebCache {
//allWebsiteDataTypes清除所有緩存
NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
}
自定義清除緩存
- (void)deleteWebCache {
/*
在磁盤緩存上骏啰。
WKWebsiteDataTypeDiskCache,
html離線Web應用程序緩存节吮。
WKWebsiteDataTypeOfflineWebApplicationCache,
內存緩存。
WKWebsiteDataTypeMemoryCache,
本地存儲器一。
WKWebsiteDataTypeLocalStorage,
Cookies
WKWebsiteDataTypeCookies,
會話存儲
WKWebsiteDataTypeSessionStorage,
IndexedDB數(shù)據(jù)庫课锌。
WKWebsiteDataTypeIndexedDBDatabases,
查詢數(shù)據(jù)庫。
WKWebsiteDataTypeWebSQLDatabases
*/
NSArray * types=@[WKWebsiteDataTypeCookies,WKWebsiteDataTypeLocalStorage];
NSSet *websiteDataTypes= [NSSet setWithArray:types];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
}
但開發(fā)app必須要兼容所有iOS版本祈秕,可是iOS8,iOS7沒有這種直接的方法雏胃,那該怎么辦呢请毛?
(iOS7.0只有UIWebView, 而iOS8.0是有WKWebView瞭亮, 但8.0的WKWebView沒有刪除緩存方法方仿。)
針對與iOS7.0、iOS8.0统翩、iOS9.0 WebView的緩存仙蚜,我們找到了一個通吃的辦法:
NSString *libraryDir = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES)[0];
NSString *bundleId = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleIdentifier"];
NSString *webkitFolderInLib = [NSString stringWithFormat:@"%@/WebKit",libraryDir];
NSString *webKitFolderInCaches = [NSString
stringWithFormat:@"%@/Caches/%@/WebKit",libraryDir,bundleId];
NSString *webKitFolderInCachesfs = [NSString
stringWithFormat:@"%@/Caches/%@/fsCachedData",libraryDir,bundleId];
NSError *error;
/* iOS8.0 WebView Cache的存放路徑 */
[[NSFileManager defaultManager] removeItemAtPath:webKitFolderInCaches error:&error];
[[NSFileManager defaultManager] removeItemAtPath:webkitFolderInLib error:nil];
/* iOS7.0 WebView Cache的存放路徑 */
[[NSFileManager defaultManager] removeItemAtPath:webKitFolderInCachesfs error:&error];