iOS之WKWebview中cookie问题的解决办法
来源:互联网 发布:个人博客整站源码 编辑:程序博客网 时间:2024/06/01 08:49
iOS8以后,苹果推出了新框架Wekkit
,提供了替换UIWebView
的组件WKWebView
。各种UIWebView
的问题没有了,速度更快了,占用内存少了,但是在使用过程中有雨不熟悉还是会出现不少问题,以下我只说明传cookie的坑!
刚开始的时候我各种传cookie,但是cookie却只是在网页表层保存了,网页内部的链接并没有保存cookie。废话不多说,仅仅需要几行代码,即可实现。(网页内部有AJAX请求)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"你的url"]];// 你所保存的cookie值 NSDictionary *dic = [[NSUserDefaults standardUserDefaults] valueForKey:@"cookie"]; NSString *cookie = [NSString stringWithFormat:@"%@=%@", [dic valueForKey:@"key"], [dic valueForKey:@"value"]];WKUserContentController *userContentController = WKUserContentController.new; WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource: [NSString stringWithFormat:@"document.cookie = '%@';", cookie] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; [userContentController addUserScript:cookieScript]; WKWebViewConfiguration* webViewConfig = WKWebViewConfiguration.new; webViewConfig.userContentController = userContentController;WKWebView *webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:webViewConfig];这样即可解决一个url内部多个跳转,cookie仍能保存的问题。
当然,如若网页之中没有很多嵌套的很多点击方法,可以尝试在- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler代理方法中解决问题
代码如下:
// API是根据WebView对于即将跳转的HTTP请求头信息和相关信息来决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{ // 你所保存的cookie NSDictionary *dic = [[NSUserDefaults standardUserDefaults] valueForKey:@"cookie"]; NSString *cookie = [NSString stringWithFormat:@"%@=%@", [dic valueForKey:@"key"], [dic valueForKey:@"value"]]; // 如果请求头部不包含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"]; [webView loadRequest:request]; decisionHandler(WKNavigationActionPolicyCancel); }}
0 0
- iOS之WKWebview中cookie问题的解决办法
- ios中wkwebview cookie设置
- iOS的Cookie存取(UIWebView,WKWebView,AFNetworking)
- iOS中WKWebView的应用
- 浅谈iOS中WKWebView和UIWebView的清除缓存问题
- WKWebView使用遇到的问题与解决办法
- IOS-WKWebView的使用以及Cookie的处理
- iOS WKWebview的dealloc方法崩溃问题
- ios之wkwebview与UIwebview的对比
- IOS 进阶之 WKWebView
- iOS开发 之 WKWebView
- WKWebView学习过程中碰到的问题
- 使用WKWebView的一个问题:iOS中使用本地html的一个大坑
- 浅谈iOS中的WKWebView添加cookie
- iOS WKWebView的使用
- iOS-WKWebView的封装
- wkwebview cookie
- iOS WKWebView加载网页禁止缩放的问题
- 算法训练 最短路 Bellman-Ford
- jQuery选择器 过滤选择器(六.表单对象属性过滤选择器)
- [二分] cf 768B Code For 1
- Fragment 出栈的方法popBackStack需要特别注意的一点
- datagridview 限制某列只能输入数字(方法一)
- iOS之WKWebview中cookie问题的解决办法
- mysql创建组合索引
- 微服务架构基础——解读六边形架构
- 工作用到的基础知识
- Java servlet 实现时钟效果
- Spring MVC中使用Thymeleaf模板引擎
- 项目:高校工资管理系统(甘特图)
- Android开发教程精粹30篇
- Android AlertDialog适配机型