如何从 WKWebView 获取 cookie?
Posted
技术标签:
【中文标题】如何从 WKWebView 获取 cookie?【英文标题】:How to get cookies from WKWebView? 【发布时间】:2015-01-30 09:37:16 【问题描述】:如何从 WKWebView 实例中获取所有个 cookie?
这是我迄今为止尝试过的:
我尝试使用- [WKWebView evaluatejavascript:completionHandler:]
评估document.cookie
- 不幸的是,结果不包含标记为HttpOnly 的cookie。
根据Introducing the Modern WebKit API (WWDC 2014 Session 206),应该可以从WKNavigation
的实例中获取response
对象。但是,根据class reference,WKNavigation
不包含任何公共方法/属性。
【问题讨论】:
【参考方案1】:由于这个问题在一年后仍未得到解答,因此我发布了我的不完美但有效的解决方案:
您可以在WKNavigationDelegate
上定义的- webView:decidePolicyForNavigationResponse:decisionHandler:
方法中访问NSHTTPURLResponse
对象。您可以稍后从 HTTP 标头中手动提取 cookie:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
NSHTTPURLResponse* response = navigationResponse.response;
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@""]];
for (NSHTTPCookie *cookie in cookies)
// Do something with the cookie
decisionHandler(WKNavigationResponsePolicyAllow);
如果您有更好的解决方案,请发布您的解决方案。
【讨论】:
但是我发现有些网址不会调用这个回调。例如而 POST 请求。 是的,许多 URL 不会回调此回调,例如用于提交或 POST 请求 好一个!为了保持一致性,“newCookies”应该是“cookies”。 就我而言,每次我得到空的“cookies”数组。以上是关于如何从 WKWebView 获取 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 4 中从 WKWebView 获取 cookie 值?
如何在 Objective-C 中要求用户接受或拒绝 WKWebView 网站的 cookie