使用UIWebView共享WKWebView Cookie

我试图与UIWebView分享WKWebViewcookies获取所有的Cookie。 我知道从UIWebView获取所有的cookie比较简单,比较WKWebView。

我在选项卡式应用程序模板中创build了两个WebView(WKWebView,UIWebView)。 下面的方法,我用于与UIWebView共享WKWebViewcookies,但没有得到成功。

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { let response = navigationResponse.response as? HTTPURLResponse let cookies = HTTPCookie.cookies(withResponseHeaderFields: response?.allHeaderFields as! [String : String], for: (response?.url)!) HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always for cookie in cookies { HTTPCookieStorage.shared.setCookie(cookie) } decisionHandler(WKNavigationResponsePolicy.allow); } 

使用上面的代码,当我login到我的帐户从WKWebView,UiWe​​bView没有login我已经。 我也试图与WKWebView共享UIWebViewcookies,它的工作。

请谁能告诉我如何可以与UIWebView共享WKWebView Cookie或如何从WKWebView中获取所有的cookie?

谢谢

您需要按照以下步骤设置wkwebview cookie

首先在初始化时就是执行脚本来设置Cookies:

 -(void)initWebView { WKWebViewConfiguration *webViewconfiguration = [[WKWebViewConfiguration alloc] init]; WKUserContentController *wkUController = [[WKUserContentController alloc] init]; if(URL.host hasSuffix:baseDomain){ //Here to determine whether the domain name is their own website NSString *jScript = [self setCookies]; WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; [wkUController addUserScript:wkUScript]; } webViewconfiguration.userContentController = wkUController; WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height) configuration:webViewconfiguration]; } //The script that executes may be slightly different +(NSString *)setCookies { NSString *script = [NSString string]; for (NSHTTPCookie *httpCookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { NSString *cookie = [NSString stringWithFormat:@"%@=%@;domain=%@;path=%@",httpCookie.name,httpCookie.value,httpCookie.domain,httpCookie.path?:@"/"]; script = [script stringByAppendingString:[NSString stringWithFormat:@"document.cookie='%@';",cookie]]; } return script; } 

然后在创buildNSURLRequest对象时手动将cookie添加到HTTP的标题中:

 - (void)loadRequest:(NSURLRequest *)request { //Here to determine whether the domain name is their own website if ([request.URL.host hasSuffix:baseDomain]){ NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:request.URL]; NSString *cookies = @""; //setting Cookies [mutableRequest addValue:cookies forHTTPHeaderField:@"Cookie"]; } // do request }