WKWebView 遇到的坑

25 篇文章 0 订阅
2 篇文章 0 订阅

wkwebView 设置Cookies

使用WKWebView configoration 设置cookie 有时候可能不成功。
使用如下方法设置cookie会偶现设置不了的问题。

NSString *cookie = [NSString stringWithFormat:@"document.cookie = 'session_id=%@'; document.cookie = 'CLIENT=App'; document.cookie = 'domain=test'", accessToken];

    WKUserScript *cookieScript = [[WKUserScript alloc]
                                  initWithSource:cookie
                                  injectionTime:WKUserScriptInjectionTimeAtDocumentStart
                                  forMainFrameOnly:NO];

    [self.configuration.userContentController addUserScript:cookieScript];

最后改为设置request headFile的方法

NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url];
        [request addValue:[NSString stringWithFormat:@"session_id=%@", accessToken] forHTTPHeaderField:@"Cookie"];
        [request addValue:[NSString stringWithFormat:@"domain=test"] forHTTPHeaderField:@"Cookie"];
        [self loadRequest:request];

缓存问题

在第一次打开webView后,移动端为了使用的便捷,会在本地做一个缓存,服务器端也有类似的缓存。但有时服务器端更改信息或者web端更改界面信息。我们往往打开移动端的webView界面,仍然是原来的界面状态,这就是移动端的缓存机制造成的。
有两个方法处理这个文图:

通过完全清除WKWebView的本地缓存,然后重新请求解决

 //// Optional data
    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
    }];

通过在请求时忽略本地和远程的缓存强制刷新

NSURLRequestReloadIgnoringLocalAndRemoteCacheData
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:20];
[self.webView loadRequest:request];

常见请求缓存类型

typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
    NSURLRequestUseProtocolCachePolicy = 0,
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,
    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值