iOS開發(fā)WKWebView如何清除緩存2018-08-16

概述

iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView沒有刪除緩存方法。iOS9.0之后就開始支持啦。
所以使用時(shí)候一定要適配iOS9.0以上

適用場景

當(dāng)我們的前端修改網(wǎng)頁上的某一些標(biāo)簽或增加內(nèi)容時(shí)候,需要最新的頁面,然而WK本身的緩存機(jī)制會把網(wǎng)頁內(nèi)容緩存到本地,導(dǎo)致前端更改的內(nèi)容不能及時(shí)在移動端更新UI,這個(gè)時(shí)候就需要清除WK的緩存,讓H5頁面一刷新就更新至最新的頁面。

清除所有的緩存

最好寫個(gè)分類,把清除緩存代碼放在分類里面,需要清除的時(shí)候直接調(diào)用。

import "WKWebView+ClearCache.h"

// 自定義清除緩存

  • (void)customDeleteWebCache;

// 清除全部緩存

  • (void)deleteWebCache;

// ios9以前清除緩存

  • (void)clearCacheInCurrentVersion;
+ (void)deleteWebCache {
    //allWebsiteDataTypes清除所有緩存
    NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        
    }];
}

自定義清除緩存

+ (void)customDeleteWebCache {
    /*
     在磁盤緩存上。
     WKWebsiteDataTypeDiskCache,
     
     html離線Web應(yīng)用程序緩存。
     WKWebsiteDataTypeOfflineWebApplicationCache,
     
     內(nèi)存緩存。
     WKWebsiteDataTypeMemoryCache,
     
     本地存儲。
     WKWebsiteDataTypeLocalStorage,
     
     Cookies
     WKWebsiteDataTypeCookies,
     
     會話存儲
     WKWebsiteDataTypeSessionStorage,
     
     IndexedDB數(shù)據(jù)庫。
     WKWebsiteDataTypeIndexedDBDatabases,
     
     查詢數(shù)據(jù)庫。
     WKWebsiteDataTypeWebSQLDatabases
     */
    NSArray * types=@[WKWebsiteDataTypeCookies,WKWebsiteDataTypeLocalStorage,WKWebsiteDataTypeDiskCache,WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeOfflineWebApplicationCache];
    
    NSSet *websiteDataTypes= [NSSet setWithArray:types];
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        
    }];
    
}

但開發(fā)app必須要兼容所有iOS版本,可是iOS8,iOS7沒有這種直接的方法,那該怎么辦呢?
(iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView沒有刪除緩存方法。)
針對與iOS7.0、iOS8.0、iOS9.0 WebView的緩存,我們找到了一個(gè)通吃的辦法:

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

希望能幫助因此困擾的小伙伴!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容