[英]Share WKWebView Cookies With UIWebView
我正在尝试与UIWebView共享WKWebView Cookies以获取所有cookie。 我知道从UIWebView中获取所有cookie作为比较WKWebView非常简单。
我在选项卡式应用程序模板中创建了两个WebView(WKWebView,UIWebView)。 我用于与UIWebView共享WKWebView cookie的以下方法,但未成功。
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);
}
当我从WKWebView登录到我的帐户时,使用上述代码,UiWebView尚未登录我。 我还尝试与WKWebView共享UIWebView Cookies,并且可以正常工作。
请任何人告诉我如何使用UIWebView共享WKWebView Cookies或如何从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;
}
然后在创建NSURLRequest对象时,将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
}
设置cookie和加载webview确实很痛苦,在加载webview之前设置cookie是很棘手的。 如果仅在委托方法中设置cookie,则永远不会加载页面。 您必须先做好Cookie的处理,然后再加载页面。 您可以在其他问题中回答我的问题,但是很快,但是您可以在目标c中遵循相同的技术。 我可以设置WKWebView使用的Cookie吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.