WKWebView載入Http頁面更新後不重新整理問題及解決辦法
WKWebView在載入HTTP的H5頁面,由於沒有HTTPS的加密傳輸,所以會在本地快取CSS樣式、Html網頁(類似電腦上下載到本地的網頁)等內容,所以在後臺更改H5頁面之後,APP由於快取的問題不能展示更改後的頁面
iOS7的系統繼續使用UIWebView載入不會出現這種問題,
iOS9也可以通過WBWebSiteDataStore的物件方法:
- (void)removeDataOfTypes:(NSSet<NSString *> *)websiteDataTypes modifiedSince:(NSDate *)date completionHandler:(void
去清理應用裡所有通過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;
}
}
}
}