iOS - 清除Web界面的缓存

265 阅读1分钟

web第一次加载完毕之后,后期继续进同一个网页会从缓存中进,导致有时不能看到最新的web界面

#####iOS 9.0 以前清除web缓存 找出web缓存的路径 清空该路径

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];

NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:webKitFolderInCaches error:&error];
[[NSFileManager defaultManager] removeItemAtPath:webkitFolderInLib error:nil];

#####iOS 9.0 以后 webKit出了清除缓存的API ######OC

NSSet *websiteDataTypes = [NSSet setWithArray:@[
                                                 WKWebsiteDataTypeDiskCache,
                                                 WKWebsiteDataTypeOfflineWebApplicationCache,
                                                 WKWebsiteDataTypeMemoryCache,
                                                 WKWebsiteDataTypeLocalStorage,
                                                 WKWebsiteDataTypeCookies,
                                                 WKWebsiteDataTypeSessionStorage,
                                                 WKWebsiteDataTypeIndexedDBDatabases,
                                                 WKWebsiteDataTypeWebSQLDatabases
                                                 ]];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
    // 结束回调
}];

######Swift

let websiteDataTypes :Set = [
                              WKWebsiteDataTypeDiskCache,
                              WKWebsiteDataTypeOfflineWebApplicationCache,
                              WKWebsiteDataTypeMemoryCache,
                              WKWebsiteDataTypeLocalStorage,
                              WKWebsiteDataTypeCookies,
                              WKWebsiteDataTypeSessionStorage,
                              WKWebsiteDataTypeIndexedDBDatabases,
                              WKWebsiteDataTypeWebSQLDatabases
                              ]
let dateFrom = Date(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: dateFrom, completionHandler: {
    print("clearH5WebCache 9.0")
})

removeDataOfTypes 方法

参数1:dataTypes: 指定删除的网站数据类型
参数2:date: 在此日期之后修改的所有网站数据将被删除。
参数3:completionHandler: 当网站数据被删除时调用的block。

type:

/ * 磁盘缓存。 * /
WKWebsiteDataTypeDiskCache,

/ * 内存中的缓存 。* /
WKWebsiteDataTypeMemoryCache,

/ * HTML离线Web应用程序缓存。 * /
WKWebsiteDataTypeOfflineWebApplicationCache,

/ * Cookies 缓存。 * /
WKWebsiteDataTypeCookies,

/ * HTML会话存储。 * /
WKWebsiteDataTypeSessionStorage,

/ * HTML本地存储。 * /
WKWebsiteDataTypeLocalStorage 

/ * IndexedDB数据库。 * /
WKWebsiteDataTypeIndexedDBDatabases,

/ * WebSQL数据库。 * /
WKWebsiteDataTypeWebSQLDatabases