美文网首页iOS-基础
iOS开发WKWebView如何清除缓存2018-08-16

iOS开发WKWebView如何清除缓存2018-08-16

作者: 噜噜噜噜噜噜噜噜 | 来源:发表于2018-08-16 15:16 被阅读0次

    概述

    iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView没有删除缓存方法。iOS9.0之后就开始支持啦。
    所以使用时候一定要适配iOS9.0以上

    适用场景

    当我们的前端修改网页上的某一些标签或增加内容时候,需要最新的页面,然而WK本身的缓存机制会把网页内容缓存到本地,导致前端更改的内容不能及时在移动端更新UI,这个时候就需要清除WK的缓存,让H5页面一刷新就更新至最新的页面。

    清除所有的缓存

    最好写个分类,把清除缓存代码放在分类里面,需要清除的时候直接调用。

    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应用程序缓存。
         WKWebsiteDataTypeOfflineWebApplicationCache,
         
         内存缓存。
         WKWebsiteDataTypeMemoryCache,
         
         本地存储。
         WKWebsiteDataTypeLocalStorage,
         
         Cookies
         WKWebsiteDataTypeCookies,
         
         会话存储
         WKWebsiteDataTypeSessionStorage,
         
         IndexedDB数据库。
         WKWebsiteDataTypeIndexedDBDatabases,
         
         查询数据库。
         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:^{
            
        }];
        
    }
    

    但开发app必须要兼容所有iOS版本,可是iOS8,iOS7没有这种直接的方法,那该怎么办呢?
    (iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView没有删除缓存方法。)
    针对与iOS7.0、iOS8.0、iOS9.0 WebView的缓存,我们找到了一个通吃的办法:

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

    希望能帮助因此困扰的小伙伴!

    相关文章

      网友评论

        本文标题:iOS开发WKWebView如何清除缓存2018-08-16

        本文链接:https://www.haomeiwen.com/subject/eccobftx.html