关闭

WKWebView加载Http页面更新后不刷新问题及解决办法

5451人阅读 评论(0) 收藏 举报

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;

            }

            

        }

    }

}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42265次
    • 积分:467
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:3篇
    • 评论:12条
    最新评论