菜鸟教程小白 发表于 2022-12-11 17:07:10

ios - WKWebView 获取cookies


                                            <p><h1>目标:</h1>

<p>我想在重定向到特定 URL 后从 <code>WKWebView</code> 获取所有 cookie。</p>

<h1>问题:</h1>

<p>我无法获取所有 cookie,一些 cookie 丢失。</p>

<h1>到目前为止尝试的选项没有多大成功:</h1>

<h2>1。观察通知</h2>

<pre><code>private func addObserver() {

    NSNotificationCenter.defaultCenter().addObserver(self,
                                                   selector: #selector(didChangeCookiesWithNotification(_:)),
                                                   name: NSHTTPCookieManagerCookiesChangedNotification,
                                                   object: nil)


}

@objc private func didChangeCookiesWithNotification(notification: NSNotification?) {

    print(&#34;cookies changed&#34;)
    print(&#34;Finish cookies location = \(NSHTTPCookieStorage.sharedHTTPCookieStorage())&#34;)
    print(&#34;Finish cookies count    = \(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies?.count)&#34;)
    print(&#34;Finish cookies          = \(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies?.map { &#34;\($0.name) --- Domain = \($0.properties?[&#34;Domain&#34;])&#34; } )&#34;)
}
</code></pre>

<h2>2。重定向</h2>

<pre><code>func webView(webView: WKWebView,
             didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {


    print(&#34;redirected URL = \(webView.URL)&#34;)


    print(&#34;Redirect cookies location = \(NSHTTPCookieStorage.sharedHTTPCookieStorage())&#34;)
    print(&#34;Redirect cookies count    = \(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies?.count)&#34;)
    print(&#34;Redirect cookies          = \(NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies?.map { &#34;\($0.name) --- Domain = \($0.properties?[&#34;Domain&#34;])&#34; } )&#34;)
}
</code></pre>

<h2>3。重置进程池</h2>

<pre><code>//Inside didReceiveServerRedirectForProvisionalNavigation
webView.configuration.processPool = WKProcessPool()
</code></pre>

<h1>问题:</h1>

<ol>
<li>如何在重定向到特定 URL 后获取所有 cookie? </li>
<li>是否存在其他写入 cookie 的位置
实时 ? </li>
<li>如何强制写入 cookie? </li>
<li>如何在添加 cookie 时收到通知? </li>
<li>我需要采用不同的方法吗?</li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>据我所知,只有一种可行的方法——从 JavaScript 获取 cookie。您将无法获取 HTTP-cookies,但对于其他类型就可以了。</p>

<p>您可以使用相同的进程池创建背景 <code>webView</code> 并使用 <code>loadHTMLString:baseURL:</code> 将空 html 加载到其中,并将重定向 URL 作为基本 url。</p>

<p>之后,您需要处理通过 <code>webView:didReceiveServerRedirectForProvisionalNavigation:</code> 进行重定向的事实。收到重定向通知时,在后台 webView 上调用 JS - 您将收到相同的 cookie。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - WKWebView 获取cookies,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38606370/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38606370/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - WKWebView 获取cookies