删除WKWebView的缓存

iOS开发, 混编成为一种趋势。在中国,用户量较大的几个代表性app,淘宝,微信,支付宝,京东等,无不采用H5与  
native混编模式。H5与native的交互变得越来越频繁,从而出现的问题也越来越多,下面我们一起讨论关于WKWebView的缓存问题。

场景:
当我们的APP已经开发完成,上传appstore以后,H5更新将不再受appstore得限制,可以随时去做更改。但WKWebView  
有默认的缓存功能,即便H5做了更改,app上显示的依旧是老得页面。为了解决这一问题,我们就会用到WKWebView的删除  
缓存功能。
iOS9 WKWebView新方法:
NSSet *websiteDataTypes = [NSSet setWithArray:@[
                        WKWebsiteDataTypeDiskCache,
                        WKWebsiteDataTypeOfflineWebApplicationCache,
                        WKWebsiteDataTypeMemoryCache,
                        WKWebsiteDataTypeLocalStorage,
                        WKWebsiteDataTypeCookies,
                        WKWebsiteDataTypeSessionStorage,
                        WKWebsiteDataTypeIndexedDBDatabases,
                        WKWebsiteDataTypeWebSQLDatabases
                    ]];
//你可以选择性的删除一些你需要删除的文件 or 也可以直接全部删除所有缓存的type  
//NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes   
modifiedSince:dateFrom completionHandler:^{
       // code
    }];

但开发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];

H5更新发版的的时候,做一次清除WebView缓存, app的WebView就会显示最新的H5页面了。

    希望能帮到你! 

你可能感兴趣的:(iOS)