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
+(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
相关文章推荐
- WKWebView之cookie的同步与管理
- WKWebView 同步 Cookie
- iOS WKWebView Cookie同步
- 使用HttpClient同步WebView时的cookie第一次加载不工作的问题的解决
- 【WebView的cookie机制 】轻松搞定WebView cookie同步问题
- 工作中关于webview同步cookie遇到的坑
- Cordova自带webview的cookie自动同步问题,和引入crosswork插件后cookie自动同步问题的解决
- android httpclient与webview cookie同步
- Andriod中WebView加载登录界面获取Cookie信息并同步保存,使第二次不用登录也可查看个人信息。
- android 加载webview时,保存并同步cookie实现免登陆
- 浅谈iOS中的WKWebView添加cookie
- WKWebView添加cookie
- 安卓中原生与H5(webview)之间交互时cookie的同步
- android WebView登录状态session id 和cookie同步
- Andriod中WebView加载登录界面获取Cookie信息并同步保存,使第二次不用登录也可查看个人信息。
- android httpclient与webview cookie同步
- WebView同步App登陆后获取到的Cookie
- Android本地登录与WebView网页登陆同步问题(cookie同步问题)
- js与oc交互以及cookie设置 UIWebView与WKWebview兼容
- 部分android手机WebView无法成功同步Cookie问题的解决方案(5.0系统以上)