精华内容
下载资源
问答
  • WKWebview缓存图片

    2018-04-18 11:13:09
    WKWebview缓存图片加载以及重定向,如何获取WKWebview的图片
  • WKWebView缓存的那点事

    万次阅读 2016-08-05 15:03:34
    通过这几天的研究,总结一下遇到的关于WKWebView缓存的一些事情 1、二级页面跳转时仍然不可设置缓存策略 用过UIWebView或WKWebView的朋友都知道,在loadRequest方法中的NSURLRequest对象,是可以设置缓存策略的,...

    WKWebView自从推出至今,一直有不断地吐槽伴随,诚然,WKWebView具有很多好处:速度更快、内存更少,但是它也有一些坑

    通过这几天的研究,总结一下遇到的关于WKWebView缓存的一些事情


    1、二级页面跳转时仍然不可设置缓存策略

    用过UIWebView或WKWebView的朋友都知道,在loadRequest方法中的NSURLRequest对象,是可以设置缓存策略的,如

    NSURLRequest * urlReuqest = [[NSURLRequest alloc]initWithURL:url cachePolicy:1 timeoutInterval:30.0f];
            [_webView loadRequest:urlReuqest];
    我们通过设置urlRequest的缓存策略为NSURLRequestReloadIgnoringLocalCacheData的操作,指定了接下来的请求必须从服务器端获取,不能加载本地缓存

        OK,然后我们执行了一个网页跳转,跳转到了一个新的链接,这时候,我们可以通过代理方法指定是否让UIWebView或WKWebView进行跳转

        但是这时候!我们如果打印WebView的request成员变量的cachePolicy属性,会发现它变成了NSURLRequestUseProtocolCachePolicy!也就是变成了系统默认的缓存策略

        这样会导致如果有一个静态页面,该静态页面进行了更改,这时候前台已经加载过的设备,除非清除掉全部缓存,否则一直不会加载出新的页面


    这个问题如果由APP端进行更改的话,只能用清理全部页面缓存的方法解决,比如后台更新了页面,可以更新一个状态时前台执行清理缓存的方法,这样页面就会重新加载,出现修改后的页面

    另一个解决办法是由服务器更改,我截取了一下百度小说访问后的response的header文件,发现这样一个字段

        "Accept-Ranges" = bytes;
        "Cache-Control" = "max-age=0";
        Connection = "keep-alive";
        "Content-Length" = 114;
        "Content-Type" = "text/html";
        Date = "Wed, 03 Aug 2016 08:00:23 GMT";
        Etag = "\"579f13e2-72\"";
        Expires = "Wed, 03 Aug 2016 08:00:23 GMT";
        "Last-Modified" = "Mon, 01 Aug 2016 09:18:26 GMT";
        Server = nginx;
    

    百度小说的response的header中,包含了一个Expires字段,该字段和Date,也就是访问页面的时间相同,这样每一次进入小说这个页面的时候,实际上是告诉App端的WebView,缓存已经过期,需要重新加载了,所以每次进入小说页面的时候,都可以实时更新

    我们也可以在Nginx服务器设置一个这样的模组,生成一个Expires字段,与访问时间同步,这样就可以略过WebView的缓存了


    2.通过JS端增加参数

    公司的大牛建议我使用这种办法,而且他不建议在APP端进行修改,所以我们访问了原网页,为跳转的window.href增加了一个时间戳,这样实际上和百度小说的解决办法是一样的,每次进入页面时都不加载缓存并直接访问新页面






    展开全文
  • 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一起交流学习!

     

    展开全文
  • 清除WKWebView缓存

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

    1.Object-C

    - (void)deleteWebCache {
        
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
            NSSet *websiteDataTypes
            = [NSSet setWithArray:@[
                                    WKWebsiteDataTypeDiskCache,
                                    //WKWebsiteDataTypeOfflineWebApplicationCache,
                                    WKWebsiteDataTypeMemoryCache,
                                    //WKWebsiteDataTypeLocalStorage,
                                    //WKWebsiteDataTypeCookies,
                                    //WKWebsiteDataTypeSessionStorage,
                                    //WKWebsiteDataTypeIndexedDBDatabases,
                                    //WKWebsiteDataTypeWebSQLDatabases
                                    ]];
            //// All kinds of data
            //NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
            //// Date from
            NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
            //// Execute
            [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
                // Done
            }];
     
        } else {
            
            NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
            NSString *cookiesFolderPath = [libraryPath stringByAppendingString:@"/Cookies"];
            NSError *errors;
            [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors];
            
        }
    }

     

    2.Swift

     func ClearCache() {
     
            let dateFrom: NSDate = NSDate.init(timeIntervalSince1970: 0)
     
            if #available(iOS 9.0, *) {
                let websiteDataTypes: NSSet = WKWebsiteDataStore.allWebsiteDataTypes()
                WKWebsiteDataStore.defaultDataStore().removeDataOfTypes(websiteDataTypes as! Set<String>, modifiedSince: dateFrom) {
                    print("清空缓存完成")
                }
            } else {
                  let libraryPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0]
                let cookiesFolderPath = libraryPath.stringByAppendingString("/Cookies")
                let errors: NSError
                try? NSFileManager.defaultManager().removeItemAtPath(cookiesFolderPath)
            }
        }

     

    转载于:https://www.cnblogs.com/HZChenCheng/p/20170407_05.html

    展开全文
  • 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缓存清理

    千次阅读 2018-11-14 18:06:54
    WKWebView清除缓存只能iOS9使用,低于iOS9运行会崩溃哦!所以,为了适配iOS7和iOS8,还是要做版本判断 if ([[[UIDevice currentDevice]systemVersion]intValue ] &gt;= 9.0) {  NSArray * types =@...
  • # 缓存问题续在上一篇文章中,提到精确控制缓存,是从别人的文章上看来的,经过老大一发问,顿时语塞,精确控制用的是NSURLSession的方法,那就意味着不用webView的load系列方法而是用NSURLSession的dataTask将对应的资源...
  • iOS 开发 WKWebView缓存处理的问题

    千次阅读 2018-11-22 12:41:52
    WKWebView使用中遇到的问题 1.关于缓存的问题 因为使用了WKWebView,后端的策划人员换图,iOS端没有更新,然后google了好久,最终算是解决了这个问题。 首先,加载第一个页面。 _urlStr = @"...
  • WKWebView是iOS8之后出现的,相较于UIWebView,WKWebView占用的内存更小,还有一些其他的优化。但是如果我们不去主动清理webView产生的缓存,两者都会存在缓存这个问题。比如说一个网页改了一些内容,如果不清理缓存...
  • iOS 使用WKWebView缓存cookie

    千次阅读 2019-09-16 10:30:56
    废话不多说,直接上代码 //插入设置cookie -(void)insertCookie{ // 创建一个可变字典存放cookie NSHTTPCookie *cookie =[self setcookie];... if (@available(iOS 11.0, *)) { ... WKHTTPCookieStore *...
  • 直接上代码 func clearCache() { if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDat...
  • 缓存策略WKWebView提供的实现了的缓存策略NSURLRequestUseProtocolCachePolicy//默认的缓存策略NSURLRequestReloadIgnoringCacheData//重新请求忽略缓存NSURLRequestReturnCacheDataElseLoad//有缓存就返回缓存,没有...
  • 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缓存

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

    2019-09-21 17:23:17
    清除WKWebView缓存 OC写法: swift写法再下下面。 清除WKWebView缓存,让H5页面一刷新就更新至最新的页面 直接上代码~!~~ 要区分iOS9.0和8.0两种 - (void)deleteWebCache { if ([[UIDevice current...
  • 删除WKWebView缓存

    万次阅读 2015-11-05 09:17:53
    H5与native的交互变得越来越频繁,从而出现的问题也越来越多,下面我们一起讨论关于WKWebView缓存问题。场景: 当我们的APP已经开发完成,上传appstore以后,H5更新将不再受appstore得限制,可以随时去做更改。但...
  • WKWebView 网页缓存和刷新

    千次阅读 2020-04-08 15:59:11
    WKWebView缓存策略 typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy) { NSURLRequestUseProtocolCachePolicy = 0, // 默认策略,具体的缓存逻辑和协议的声明有关,如果协议没有声明,不需要每次重...
  • 清除WKWebView缓存OC写法: swift写法再下下面。清除WKWebView缓存,让H5页面一刷新就更新至最新的页面直接上代码~!~~要区分iOS9.0和8.0两种- (void)deleteWebCache {if ([[UIDevice currentDevice].system...
  • 由于不懂后端的知识,折腾了很久,网上也查找了很多都说需要清除缓存。这是在网上查找的iOS9以上清除缓存方法NSArray * types = @[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache];NSSet*...
  • WKWebView清除缓存

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

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

    千次阅读 2018-05-10 16:49:07
    缓存策略有以下四种方式: 默认的NSURLRequest 缓存策略 后台需要做响应头设置,否则无法进行缓存。存在cache目录,n磁盘紧张会被清除 NSURLCache 和上面类似。可以不需要后台设置也能存储。存在cache...
  • 缓存策略有以下四种方式:默认的NSURLRequest 缓存策略后台需要做响应头设置,否则无法进行缓存。存在cache目录,n磁盘紧张会被清除NSURLCache和上面类似。可以不需要后台设置也能存储。存在cache目录,n磁盘紧张会...
  • Shingo Fukuy..52在iOS 9中// Optional dataNSSet *websiteDataTypes= [NSSet setWithArray:@[WKWebsiteDataTypeDiskCache,//WKWebsiteDataTypeOfflineWebApplicationCache,WKWebsiteDataTypeMemoryCache,//...

空空如也

空空如也

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

wkwebview缓存