WKWebView ajax cookie

这2天遇到了这个问题,这此我分享给大家。

1问题原因:WKWebView加载的网页中用到了ajax请求,但是ajax又没有带上cookie导致无法请求到数据。

解决办法如下:

navigationDelegate代理方法


- (void) webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler

中添加如下代码:

pragma mark 在发送请求之前,决定是否跳转


- (void) webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

NSLog(@"decidePolicyForNavigationAction");

NSMutableString *cookie = [NSMutableString stringWithFormat:@""];

cookie=[[NSUserDefaults standardUserDefaults] objectForKey:@"cookie"];// 你所保存的cookie

// 如果请求头部不包含cookie值则需要我们去传cookie

if ([navigationAction.request allHTTPHeaderFields][@"Cookie"] && [[navigationAction.request allHTTPHeaderFields][@"Cookie"] rangeOfString:cookie].length > 0) {

decisionHandler(WKNavigationActionPolicyAllow);

} else {

NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:navigationAction.request.URL];

[request setValue:cookie forHTTPHeaderField:@"Cookie"];

//取出cookie

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

//js函数

NSString *JSFuncString =

@"function setCookie(name,value,expires)\

{\

var oDate=new Date();\

oDate.setDate(oDate.getDate()+expires);\

document.cookie=name+'='+value+';expires='+oDate+';path=/'\

}";

//拼凑js字符串,按照自己的需求拼凑Cookie

NSMutableString *JSCookieString = JSFuncString.mutableCopy;

for (NSHTTPCookie *cookie in cookieStorage.cookies) {

if (![cookie.name isEqualToString:@"__cust"]) {

NSString *excuteJSString = [NSString stringWithFormat:@"setCookie('%@', '%@', 3);", cookie.name, cookie.value];

[JSCookieString appendString:excuteJSString];

NSLog(@"excuteJSString:%@",excuteJSString);

}

}

//执行js

[webView evaluateJavaScript:JSCookieString completionHandler:nil];

decisionHandler(WKNavigationActionPolicyAllow);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 9,100评论 2 12
  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    Dark_Angel阅读 29,166评论 67 291
  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers阅读 6,066评论 0 16
  • 公司开始让做一个新iOS项目,由于苹果的更新需要每次发版本审核,没法像服务器一样实时更新,技术部就讨论出原生+HT...
    奶茶007阅读 1,824评论 16 9
  • 一、WebView WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和...
    iOS祎阅读 1,157评论 0 2