WKWebView缓存的那些事

2017-04-21  本文已影响227人  向晚forever

这几天app内嵌的H5页面后台更新了内容,但是app里面H5页面没有及时的更新。
以前也遇到过,基本都是加一个随机数或者时间戳去处理。
今天就针对这个问题解决下。

WKWebView的清除缓存API(iOS9以上使用)

//   不能使用系统提供的api,使用这个二级页面更新不了
//    if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
//        NSSet *types = [NSSet setWithArray:@[
//                                             WKWebsiteDataTypeDiskCache,
//                                             WKWebsiteDataTypeOfflineWebApplicationCache,
//                                             WKWebsiteDataTypeMemoryCache,
//                                             WKWebsiteDataTypeLocalStorage,
//                                             WKWebsiteDataTypeCookies,
//                                             WKWebsiteDataTypeSessionStorage,
//                                             WKWebsiteDataTypeIndexedDBDatabases,
//                                             WKWebsiteDataTypeWebSQLDatabases
//                                             ]];
//        NSDate *dateForm = [NSDate date];
//        [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:types modifiedSince:dateForm completionHandler:^{
//            DGLog(@"wkwebView chear cache over");
//
//            if (completion) {
//                completion(YES);
//            }
//
//        }];
//    }
//    else{
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
            DGLog(@"libraryPath:%@",libraryPath);
            //必须把这文件夹全部删除
            NSString *webkitFolderInLib = [libraryPath stringByAppendingString:@"/WebKit"];
            NSString *cachesFolderInLib = [libraryPath stringByAppendingString:@"/Caches"];
            [[NSFileManager defaultManager] removeItemAtPath:webkitFolderInLib error:nil];
            [[NSFileManager defaultManager] removeItemAtPath:cachesFolderInLib error:nil];
            
            dispatch_sync(dispatch_get_main_queue(), ^{
                if (completion) {
                    completion(YES);
                }
            });
        });
    //}

清除缓存的时机。
可以和后台达成一个协议,当后台更新了数据,给客户端一个通知。然后客户端就去清除缓存。

上一篇下一篇

猜你喜欢

热点阅读