Каждый ** WKWebView ** имеет свое собственное пространство cookie, в котором пространство cookie сохраняется в WKProcessPool , просто сделайте объект пула процессов глобальным и назначьте его каждому объекту веб-просмотра, надеемся, что это будет работать в вашем случае.
static let processPool = WKProcessPool()
И каждый раз устанавливайте свой экземпляр WKWebView с этим пулом процессов, иначе вы создаете wkwebview и загружаете эту функцию.
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
// use to sync cookies
guard let response = navigationResponse.response as? HTTPURLResponse, let responseUrl = navigationResponse.response.url else {
decisionHandler(.cancel)
return
}
if #available(iOS 11.0, *) {
self.webView.httpCookieStore.getAllCookies { (cookies) in
cookies.forEach({ (cookie) in
if cookie.name == Constant.appCodeCookie || cookie.name == Constant.rpgaCookieName || cookie.name == Constant.headerCookie , cookie.name == Constant.adIdCookie {
HTTPCookieStorage.shared.setCookie(cookie)
}
})
}
} else {
// Fallback version
if let allHttpHeaders = response.allHeaderFields as? [String: String] {
let cookies = HTTPCookie.cookies(withResponseHeaderFields: allHttpHeaders, for: responseUrl)
for cookie in cookies {
HTTPCookieStorage.shared.setCookie(cookie)
}
}
}
decisionHandler(.allow)
}
Каждый раз, когда вы создаете экземпляр wkwebviewпросто получите все куки из httpcookiestorage и установите в пользовательском скрипте wkwebview для дальнейшего, вы также можете проверить мой ответ здесь. Могу ли я установить файлы cookie, которые будут использоваться WKWebView?