精华内容
下载资源
问答
  • wkwebview 缓存
    千次阅读
    2021-10-26 18:49:24
    //清除缓存
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];
    [[NSURLCache sharedURLCache] setMemoryCapacity:0];
    
    //清除Cookie
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *cookie in [storage cookies]) {
        [storage deleteCookie:cookie];
    }

    iOS9之后新增了按时间清除web缓存的方法

    NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        NSLog(@"WKWebsiteDataStore removeDataOfTypes");
    }];
    /*! @abstract Removes website data of the given types for the given data records.
     @param dataTypes The website data types that should be removed.
     @param dataRecords The website data records to delete website data for.
     @param completionHandler A block to invoke when the website data for the records has been removed.
    */
    - (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes forDataRecords:(NSArray<WKWebsiteDataRecord *> *)dataRecords completionHandler:(void (^)(void))completionHandler;
    
    
    /*! @abstract Removes all website data of the given types that has been modified since the given date.
     @param dataTypes The website data types that should be removed.
     @param date A date. All website data modified after this date will be removed.
     @param completionHandler A block to invoke when the website data has been removed.
    */
    - (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes modifiedSince:(NSDate *)date completionHandler:(void (^)(void))completionHandler;

    更多相关内容
  • WKWebview缓存图片

    2018-04-18 11:13:09
    WKWebview缓存图片加载以及重定向,如何获取WKWebview的图片
  • wkWebView缓存问题

    2022-04-08 10:24:01
    发生背景 项目是一个IOS套壳的H5项目 现在的问题 比如H5代码从1.0版本升级到2.0版本,app打开后也会正常访问2.0版本的H5代码,但是app后台挂一段时间后在访问,莫名的又会变回1.0版本的代码, 我想要达到的结果 这个...
  • iOS WKWebView离线缓存

    2021-07-09 12:45:34
    功能包括: WKWebView的使用、JS和OC的交互、网页内容加载进度条的实现、WKWebView+UITableView混排 、 WKWebView离线缓存等。GitHub:https://github.com/wsl2ls/iOS_TipsiOS_Tips集合简介:1、暗黑模式2、AppleID...
  • WKWebView缓存问题处理

    千次阅读 2021-02-01 11:29:06
    如何不用缓存,每次请求最新的Web数据 - (void)loadNoCacheData { NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.baidu.com"]]; NSMutableURLRequest *request = ...

    如何不用缓存,每次请求最新的Web数据

    - (void)loadNoCacheData {
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.baidu.com"]];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15.0];
        [_webView loadRequest:request];
    }

    每次请求设置缓存策略为不使用缓存:NSURLRequestReloadIgnoringLocalCacheData

    typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
    {
        NSURLRequestUseProtocolCachePolicy = 0,
    
        NSURLRequestReloadIgnoringLocalCacheData = 1,
        NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
        NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    
        NSURLRequestReturnCacheDataElseLoad = 2,
        NSURLRequestReturnCacheDataDontLoad = 3,
    
        NSURLRequestReloadRevalidatingCacheData = 5,
    };

    如果请求的时候使用了默认的缓存策略,可以通过以下方式清除缓存:

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

    也可以自定义清除缓存

    - (void)deleteWebCache {
        NSArray *types = @[WKWebsiteDataTypeCookies, WKWebsiteDataTypeLocalStorage];
        NSSet *websiteDataTypes= [NSSet setWithArray:types];
        NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
        [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
    
        }];
    }
    /*! @constant WKWebsiteDataTypeDiskCache On-disk caches. */
    WK_EXTERN NSString * const WKWebsiteDataTypeDiskCache API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeMemoryCache In-memory caches. */
    WK_EXTERN NSString * const WKWebsiteDataTypeMemoryCache API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeOfflineWebApplicationCache HTML offline web application caches. */
    WK_EXTERN NSString * const WKWebsiteDataTypeOfflineWebApplicationCache API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeCookies Cookies. */
    WK_EXTERN NSString * const WKWebsiteDataTypeCookies API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeSessionStorage HTML session storage. */
    WK_EXTERN NSString * const WKWebsiteDataTypeSessionStorage API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeLocalStorage HTML local storage. */
    WK_EXTERN NSString * const WKWebsiteDataTypeLocalStorage API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeWebSQLDatabases WebSQL databases. */
    WK_EXTERN NSString * const WKWebsiteDataTypeWebSQLDatabases API_AVAILABLE(macos(10.11), ios(9.0));
    
    /*! @constant WKWebsiteDataTypeIndexedDBDatabases IndexedDB databases. */
    WK_EXTERN NSString * const WKWebsiteDataTypeIndexedDBDatabases API_AVAILABLE(macos(10.11), ios(9.0));

     

    展开全文
  • iOS-WKWebView缓存并保证实时性

    千次阅读 2020-01-16 17:47:20
    说到WKWebView缓存,我之前也写过一篇关于UIWebView的缓存的,文章地址如下: 《iOS-UIWebview缓存并保证实时性》 但是这个方法对于WKWebView就失去了效果,后来公司的项目全部改为WKWebView,至于WKWebView的...

    前言

    说到WKWebView的缓存,我之前也写过一篇关于UIWebView的缓存的,文章地址如下:

    《iOS-UIWebview缓存并保证实时性》

    但是这个方法对于WKWebView就失去了效果,后来公司的项目全部改为WKWebView,至于WKWebView的好处,这边就不过多叙述了;上面的方法要是在WKWebView上就失效了,后来我也修改了新的方案,自己的闲暇时间一直在维护自己的几款软件ZFJObsLibZFJPyMix,所以一直没时间总结优化一下,在此我对ZFJCacheProtocol重新优化了一下,大家也可以根据自己的理解和需求自行优化设计;在UIWebView的时候我是缓存全部数据的,在这里开发者可以自行选择缓存的类型!

    具体流程图如下:

    如果想详细了解NSURLRequest的相关的缓存机制,可以看《iOS-UIWebview缓存并保证实时性》

    详细API如下:

    ZFJWebCache

    使用效果

    使用教程

    只需要在需要监听的页面开启网络监听就可以了,在不需要监听的时候取消监听即可,如下:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        //开始监听缓存数据
        [ZFJCacheProtocol startMonitorRequest:ZFJCacheAllType];
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        //在不需要用到webview的时候即使的取消监听
        [ZFJCacheProtocol cancelMonitorRequest];
    }

    自定义配置

    1.自定义缓存类型

    ZFJWebCache主要根据MIMEType可以对缓存的数据类型进行区分,具体指出的缓存类型如下:

    typedef NS_ENUM(NSInteger, ZFJCacheType) {
        ZFJCacheAllType         = 1 << 0,     //缓存全部
        ZFJCacheImageType       = 1 << 1,     //缓存图片
        ZFJCacheVideoType       = 1 << 2,     //缓存视频
        ZFJCacheAudioType       = 1 << 3,     //缓存音频
        ZFJCacheTextType        = 1 << 4,     //缓存text
        ZFJCacheMessageType     = 1 << 5,     //缓存message
        ZFJCacheX_WorldType     = 1 << 6,     //缓存x-world
        ZFJCacheApplicationType = 1 << 7,     //缓存application
        ZFJCacheNoneType        = 1 << 8,     //未知类型
    };

    比如你只想缓存image使用如下:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        //开始监听缓存数据
        [ZFJCacheProtocol startMonitorRequest:ZFJCacheImageType];
    }

    2.设置缓存过期时间

    ZFJWebCache的默认过期时间是一小时(3600s),如果想自定义缓存过期时间可设置如下:

    // 设置缓存过期时间
        [ZFJCacheConfig instance].updateInterval = 1200;

    3.设置忽略url

    NSArray *ignoreUrlArray = @[@"http://www.baidu.com"];
    [ZFJCacheConfig instance].ignoreUrlArray = ignoreUrlArray;

    4.其他配置API如下

    //
    //  ZFJCacheConfig.h
    //  Ahaschool
    //
    //  Created by ZFJMBPro on 2020/1/13.
    //  Copyright © 2020 ahaschool. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "ZFJMIMEType.h"
    
    @interface ZFJCacheConfig : NSObject
    
    + (instancetype)instance;
    
    /// 上一次url请求时间
    @property (readwrite, nonatomic, strong) NSDictionary *lastRequestDict;
    
    /// 支持的缓存类型
    @property (nonatomic,assign) ZFJCacheType cacheType;
    
    /// 相同的Url请求缓存时间间隔(默认3600s)
    @property (readwrite, nonatomic, assign) NSInteger updateInterval;
    
    /// 为NSURLSession配置一些请求所需要的策略
    @property (readwrite, nonatomic, strong) NSURLSessionConfiguration *config;
    
    /// 请求任务队列
    @property (readwrite, nonatomic, strong) NSOperationQueue *forgeroundNetQueue;
    
    /// 缓存任务队列
    @property (readwrite, nonatomic, strong) NSOperationQueue *backgroundNetQueue;
    
    /// 忽略的url链接
    @property (nonatomic, strong) NSArray *ignoreUrlArray;
    
    /// 清空内存中的url记录(收到内存警告的时候可以调用这个方法清空内存中的url记录)
    - (void)clearUrlDict;
    
    /// 获取缓存路径
    - (NSString *)documentPath;
    
    /// 是否支持缓存
    - (BOOL)isSupportCache:(NSString *)mimeType;
    
    @end
    

    源码

    GTIEE:https://gitee.com/zfj1128/ZFJWebCache

    结束语

    欢迎各位大佬提供宝贵的建议和意见,也欢迎大家进群或加本人QQ一起交流学习!

     

    展开全文
  • iOS 开发 WKWebView缓存处理的问题

    千次阅读 2018-11-22 12:41:52
    WKWebView使用中遇到的问题 1.关于缓存的问题 因为使用了WKWebView,后端的策划人员换图,iOS端没有更新,然后google了好久,最终算是解决了这个问题。 首先,加载第一个页面。 _urlStr = @"...

    WKWebView使用中遇到的问题

    1.关于缓存的问题

    因为使用了WKWebView,后端的策划人员换图,iOS端没有更新,然后google了好久,最终算是解决了这个问题。

    首先,加载第一个页面。

    _urlStr = @"https://www.baidu.com";

    //设置缓存的请求策略和超时时间

    NSURLRequest * urlReuqest = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:_urlStr] cachePolicy:1 timeoutInterval:30.0f];

    [_webView loadRequest:urlReuqest];

    这时能正常的显示第一个页面,及时更换了图片也能正常的显示。

    但是在跳转另一个URL时,不能设置缓存方式。。。这样就造成了,如果你更换了图片,并且之前你进入了这个页面,就导致了你看到的是以前的页面。我这里找到的处理的方式是在这个WKWebView调用dealloc方法时,把html页面的缓存全部删掉。以下是方法

    //在ViewController销毁时移除KVO观察者,同时清除所有的html缓存

    - (void)dealloc {

    [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];

    [self.webView removeObserver:self forKeyPath:@"title"];

    [self clearCache];

    }

    /** 清理缓存的方法,这个方法会清除缓存类型为HTML类型的文件*/

    - (void)clearCache {

    /* 取得Library文件夹的位置*/

    NSString *libraryDir = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES)[0];

    /* 取得bundle id,用作文件拼接用*/

    NSString *bundleId = [[[NSBundle mainBundle] infoDictionary]objectForKey:@"CFBundleIdentifier"];

    /*

    * 拼接缓存地址,具体目录为App/Library/Caches/你的APPBundleID/fsCachedData

    */

    NSString *webKitFolderInCachesfs = [NSString stringWithFormat:@"%@/Caches/%@/fsCachedData",libraryDir,bundleId];

    NSError *error;

    /* 取得目录下所有的文件,取得文件数组*/

    NSFileManager *fileManager = [NSFileManager defaultManager];

    // NSArray *fileList = [[NSArray alloc] init];

    //fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组

    NSArray *fileList = [fileManager contentsOfDirectoryAtPath:webKitFolderInCachesfs error:&error];

    /* 遍历文件组成的数组*/

    for(NSString * fileName in fileList){

    /* 定位每个文件的位置*/

    NSString * path = [[NSBundle bundleWithPath:webKitFolderInCachesfs] pathForResource:fileName ofType:@""];

    /* 将文件转换为NSData类型的数据*/

    NSData * fileData = [NSData dataWithContentsOfFile:path];

    /* 如果FileData的长度大于2,说明FileData不为空*/

    if(fileData.length >2){

    /* 创建两个用于显示文件类型的变量*/

    int char1 =0;

    int char2 =0;

    [fileData getBytes:&char1 range:NSMakeRange(0,1)];

    [fileData getBytes:&char2 range:NSMakeRange(1,1)];

    /* 拼接两个变量*/

    NSString *numStr = [NSString stringWithFormat:@"%i%i",char1,char2];

    /* 如果该文件前四个字符是6033,说明是Html文件,删除掉本地的缓存*/

    if([numStr isEqualToString:@"6033"]){

    [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@",webKitFolderInCachesfs,fileName]error:&error];

    continue;

    }

    }

    }

    }

    展开全文
  • WKWebView是iOS8之后出现的,相较于UIWebView,WKWebView占用的内存更小,还有一些其他的优化。但是如果我们不去主动清理webView产生的缓存,两者都会存在缓存这个问题。比如说一个网页改了一些内容,如果不清理缓存...
  • WKWebView离线缓存

    2022-07-15 04:02:27
    WKWebView离线缓存
  • WKWebView缓存问题(续)

    2021-06-18 11:15:52
    # 缓存问题续在上一篇文章中,提到精确控制缓存,是从别人的文章上看来的,经过老大一发问,顿时语塞,精确控制用的是NSURLSession的方法,那就意味着不用webView的load系列方法而是用NSURLSession的dataTask将对应的资源...
  • WKWebView缓存问题

    2021-06-13 08:50:52
    缓存策略WKWebView提供的实现了的缓存策略NSURLRequestUseProtocolCachePolicy//默认的缓存策略NSURLRequestReloadIgnoringCacheData//重新请求忽略缓存NSURLRequestReturnCacheDataElseLoad//有缓存就返回缓存,没有...
  • WKWebView缓存策略

    2021-08-01 04:41:44
    缓存策略有以下四种方式:默认的NSURLRequest 缓存策略后台需要做响应头设置,否则无法进行缓存。存在cache目录,n磁盘紧张会被清除NSURLCache和上面类似。可以不需要后台设置也能存储。存在cache目录,n磁盘紧张会...
  • WKWebView清除缓存

    2021-05-01 16:02:30
    需要引入框架import WebKit let recordType = WKWebsiteDataStore.allWebsiteDataTypes() WKWebsiteDataStore.default().fetchDataRecords(ofTypes: recordType) { records in WKWebsiteDataStore.default().remove...
  • WKWebView缓存

    2019-03-20 10:52:26
     相信使用过webView的人都挺烦每次都有一段空白期,用户体验感极差,所以公司要求在webView上增加缓存,废话不多说了,进入正题! 1.使用WKWebView // 1.简单创建WKWebView WKWebView *webView = [[WKWebView ...
  • iOS WKWebView缓存策略

    千次阅读 2020-12-03 10:33:57
    缓存策略有以下四种方式: 默认的NSURLRequest 缓存策略 后台需要做响应头设置,否则无法进行缓存。存在cache目录,n磁盘紧张会被清除 NSURLCache 和上面类似。可以不需要后台设置也能存储。存在cache目录,n磁盘...
  • swift 去掉WKWebView缓存的方法

    千次阅读 2019-08-30 10:19:55
    直接上代码 func clearCache() { if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDat...
  • 转载地址: WKWebView默认缓存策略与HTTP缓存协议
  • WKWebView 清除缓存的方法

    千次阅读 2020-05-24 17:26:55
    iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView没有删除缓存方法。iOS9.0之后就开始支持啦。 所以使用时候一定要适配iOS9.0以上 适用场景 当我们的前端修改网页上的某一些标签或增加内容时候,...
  • 清除WKWebView缓存

    2021-06-13 08:52:31
    清除WKWebView缓存OC写法: swift写法再下下面。清除WKWebView缓存,让H5页面一刷新就更新至最新的页面直接上代码~!~~要区分iOS9.0和8.0两种- (void)deleteWebCache {if ([[UIDevice currentDevice].system...
  • WKWebView默认缓存的使用

    千次阅读 2020-09-10 11:01:09
    WKWebView加载网页时为了追求更好的用户体验,会设计一个缓存机制来应对加载缓慢的问题。 缓存的方案一般有2种: 1.利用浏览器自带的缓存机制。优点(缓存机制由系统提供方便快捷),缺点(系统将内容存在cache中,...
  • ????????关注后回复“进群”,拉你进程序员交流群??...作者丨童红明来源丨百度App技术1. 前言缓存可以减少冗余的数据传输,解决网络瓶颈问题,降低服务端压力,提升页面加载速度。高效利用缓存可大...
  • 由于不懂后端的知识,折腾了很久,网上也查找了很多都说需要清除缓存。这是在网上查找的iOS9以上清除缓存方法NSArray * types = @[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache];NSSet*...
  • iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8.0的WKWebView没有删除缓存方法。iOS9.0之后就开始支持啦。 所以使用时候一定要适配iOS9.0以上 适用场景 当我们的前端修改网页上的某一些标签或增加内容时候,...
  • WKWebView对网页和js,css,png等资源文件都进行缓存。...最佳解决方案是js中对每一个网址,js,css,png等资源文件下载地址都加版本号,这样既利用了WKWebView缓存机制又实现了他们按照需要刷新。...
  • iOS 使用WKWebView缓存cookie

    千次阅读 2019-09-16 10:30:56
    废话不多说,直接上代码 //插入设置cookie -(void)insertCookie{ // 创建一个可变字典存放cookie NSHTTPCookie *cookie =[self setcookie];... if (@available(iOS 11.0, *)) { ... WKHTTPCookieStore *...
  • WKWebView 网页缓存和刷新

    千次阅读 2020-04-08 15:59:11
    WKWebView缓存策略 typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy) { NSURLRequestUseProtocolCachePolicy = 0, // 默认策略,具体的缓存逻辑和协议的声明有关,如果协议没有声明,不需要每次重...
  • WKWebView关于缓存的问题

    千次阅读 2018-05-13 18:55:40
    WKWebView使用中遇到的问题 1.关于缓存的问题 因为使用了WKWebView,后端的策划人员换图,iOS端没有更新,然后google了好久,最终算是解决了这个问题。 首先,加载第一个页面。 _urlStr = @"...
  • 清除WKWebView缓存

    2019-09-27 13:23:46
    清空缓存完成 " ) } } else { let libraryPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true )[ 0 ] let cookiesFolderPath = libraryPath.stringByAppendingString( ...
  • 删除WKWebView缓存

    千次阅读 2016-12-19 19:04:57
    iOS开发, 混编成为一种趋势。在中国,用户量较大的几个代表性app,淘宝,微信,支付宝,京东...H5与native的交互变得越来越频繁,从而出现的问题也越来越多,下面我们一起讨论关于WKWebView缓存问题。 场景: 当

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,593
精华内容 637
关键字:

wkwebview 缓存