您的位置:首页 > 移动开发

wkwebview cookie同步

2017-03-30 14:56 381 查看
一、wkwebview之间同步

+(WKProcessPool *)shareWKProcessPool
{
    if (processPoll ==nil) {
        processPoll = [[WKProcessPoolalloc]init];
    }
    returnprocessPoll;
}

- (void)viewDidLoad {
    [superviewDidLoad];
    // Do any additional setup after loading the view.
    
    WKWebViewConfiguration *internalConfig = [[WKWebViewConfigurationalloc]init];
    internalConfig.processPool = [WKViewControllershareWKProcessPool];
    //WKUserContentController *contentController = [[WKUserContentController alloc] init];
    //internalConfig.userContentController = contentController;
    
    WKWebView *webView = [[WKWebViewalloc]initWithFrame:self.view.boundsconfiguration:internalConfig];
    [webView loadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://localhost:81/test/indexcookie.html"]]];
    [self.viewaddSubview:webView];

    webView.navigationDelegate =self;
    webView.UIDelegate =self;
}

二、把UIWebView的cookie同步到WKWebView
方法1:

[internalConfig.userContentControllerremoveAllUserScripts];
    NSString *JSCookieString =@"document.cookie='name=value;domain=www.domain.com;expires=eee, dd MM yyyy HH:mm:ss;path=/'";
    WKUserScript * cookieScript = [[WKUserScriptalloc]
                                   initWithSource:JSCookieString
                                   injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];
    [internalConfig.userContentControlleraddUserScript:cookieScript];

WKWebView *webView = [[WKWebViewalloc] initWithFrame:self.view.boundsconfiguration:internalConfig];
    [webView loadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://localhost:81/test/indexcookie.html"]]];

方法2:

NSMutableURLRequest * request = [NSMutableURLRequest
requestWithURL:[NSURL
URLWithString:@"http://localhost:81/test/indexcookie.html"]];
      [request addValue:@"name=value;...;..." forHTTPHeaderField:@"Cookie"];
    [webView loadRequest:request];

方法3:
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
//    [webView evaluateJavaScript:@"document.cookie ='TeskCookieKey1=TeskCookieValue1';" completionHandler:^(id result, NSError *error) {
//        //...
//    }];
    
    //思路是这样子的,我们可以通过NSHTTPCookieStorage的一个单例,拿到app中所有的UIWebView的cookie,拿到之后再通过让WKWebView执行一段js代码,把这些cookie设置到WKWebView中,这样就可以实现WKWebView获取UIWebView的cookie了。
    //取出cookie
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];
    //js函数
    NSString *JSFuncString =@"function setCookie(name,value,expires)\
    {\
    var oDate=new Date();\
    oDate.setDate(oDate.getDate()+expires);\
    document.cookie=name+'='+value+';expires='+oDate;\
    }";
    
    //拼凑js字符串
    NSMutableString *JSCookieString = JSFuncString.mutableCopy;
    for (NSHTTPCookie *cookiein cookieStorage.cookies)
{
        NSString *excuteJSString = [NSStringstringWithFormat:@"setCookie('%@',
'%@', 1);", cookie.name, cookie.value];
        [JSCookieString appendString:excuteJSString];
    }
    //执行js
    [webView evaluateJavaScript:JSCookieStringcompletionHandler:nil];
    
    
    //读取
    [webView evaluateJavaScript:[NSStringstringWithFormat:@"document.cookie"]completionHandler:^(id_Nullable
response, NSError *_Nullable error) {
        if (response !=0) {
            NSLog(@"\n\n document.cookie:%@,%@",response,error);
        }
    }];
}

参考:http://fengqiang.leanote.com/post/iOS%E5%BC%80%E5%8F%91-%E6%89%93%E9%80%9AUIWebView%E5%92%8CWKWebView%E7%9A%84Cookie
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: