如何从 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 值?

从 WKWebView 获取所有 cookie

如何在 Objective-C 中要求用户接受或拒绝 WKWebView 网站的 cookie

iOS WKWebView 从点获取 RGBA 像素颜色

将WKWebView Cookie同步到NSHTTPCookieStorage

将 WKWebView Cookie 同步到 NSHTTPCookieStorage