一、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