1. 程式人生 > >WKWebView載入Http頁面更新後不重新整理問題及解決辦法

WKWebView載入Http頁面更新後不重新整理問題及解決辦法

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;

            }

        }

    }

}