WKWebView在加载HTTP的H5页面,由于没有HTTPS的加密传输,所以会在本地缓存CSS样式、Html网页(类似电脑上下载到本地的网页)等内容,所以在后台更改H5页面之后,APP由于缓存的问题不能展示更改后的页面
iOS7的系统继续使用UIWebView加载不会出现这种问题,
iOS9也可以通过WBWebSiteDataStore的对象方法:
- (void)removeDataOfTypes:(NSSet<NSString *> *)websiteDataTypes modifiedSince:(NSDate *)date completionHandler:(void (^)(void))completionHandler;
去清理应用里所有通过WKWebView加载过的网页缓存
但是如果对于iOS8来说,WBWebSiteDataStore类无法使用,就会出现无法清理清理缓存的问题
可以用如下的方法去清理存储在APP里面的网页缓存,在WebView的dealloc方法里调用即可
iOS9也同样可以调用这个方法,因为调用系统的WBWe'bSiteDataStore会清理所有的缓存,包括Bootstrap、网页图片等缓存,会影响下次加载的效率
方法如下:
/** 清理缓存的方法,这个方法会清除缓存类型为HTML类型的文件*/
- (void)clearCache
{
/* 取得Library文件夹的位置*/
NSString *libraryDir =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES)[0];
/* 取得bundle id,用作文件拼接用*/
NSString *bundleId = [[[NSBundlemainBundle] infoDictionary]objectForKey:@"CFBundleIdentifier"];
/*
* 拼接缓存地址,具体目录为App/Library/Caches/你的APPBundleID/fsCachedData
*/
NSString *webKitFolderInCachesfs = [NSStringstringWithFormat:@"%@/Caches/%@/fsCachedData",libraryDir,bundleId];
NSError *error;
/* 取得目录下所有的文件,取得文件数组*/
NSFileManager *fileManager = [NSFileManagerdefaultManager];
NSArray *fileList = [[NSArrayalloc] init];
//fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组
fileList = [fileManager contentsOfDirectoryAtPath:webKitFolderInCachesfserror:&error];
HLog(@"路径==%@,fileList%@",webKitFolderInCachesfs,fileList);
/* 遍历文件组成的数组*/
for(NSString * fileNamein fileList){
/* 定位每个文件的位置*/
NSString * path = [[NSBundlebundleWithPath:webKitFolderInCachesfs]pathForResource:fileNameofType:@""];
/* 将文件转换为NSData类型的数据*/
NSData * fileData = [NSDatadataWithContentsOfFile:path];
/* 如果FileData的长度大于2,说明FileData不为空*/
if(fileData.length >2){
/* 创建两个用于显示文件类型的变量*/
int char1 =0;
int char2 =0;
[fileData getBytes:&char1range:NSMakeRange(0,1)];
[fileData getBytes:&char2range:NSMakeRange(1,1)];
/* 拼接两个变量*/
NSString *numStr = [NSStringstringWithFormat:@"%i%i",char1,char2];
/* 如果该文件前四个字符是6033,说明是Html文件,删除掉本地的缓存*/
if([numStrisEqualToString:@"6033"]){
[[NSFileManagerdefaultManager] removeItemAtPath:[NSStringstringWithFormat:@"%@/%@",webKitFolderInCachesfs,fileName]error:&error];
continue;
}
}
}
}