Общие файлы cookie с WKProcessPool для WKWebView в Swift

Может ли кто-нибудь сказать мне, как создать WKProcessPool в Swift? Я не знаком с Objective-C. Мне нужно создать WKProcessPool, чтобы иметь общие файлы cookie со всеми WKWebViews. Я хочу сохранить куки, даже когда я показываю другой контроллер просмотра с тем же классом. Я пробовал следующее, но это не работает.

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView = WKWebView()

    override func viewDidLoad() {
        super.viewDidLoad()

        let processPool = WKProcessPool()
        let configuration = WKWebViewConfiguration()
        configuration.processPool = WKProcessPool()

        webView.navigationDelegate = self
        view.addSubview(webView)
    }
}

person Stef    schedule 15.09.2017    source источник


Ответы (2)


Вам нужно использовать свойство configuration.websiteDataStore вместо пула процессов.

Для сохраненных файлов cookie используйте значение WKWebsiteDataStore.default(). Для приватного просмотра используйте WKWebsiteDataStore.nonPersistent().

person Eldar Pikunov    schedule 25.09.2017
comment
Спасибо за ответ Эльдар! Это должно быть правильным решением для меня! Я попытался реализовать метод WKWebsiteDataStore.default(). let configuration = WKWebViewConfiguration() configuration.websiteDataStore = WKWebsiteDataStore.default() webView = WKWebView(frame: CGRect.zero, configuration: configuration) Но как мне получить доступ к этой конфигурации из другого класса, чтобы он использовал эти файлы cookie в другом WKWebView и оставался в системе? - person Stef; 27.09.2017
comment
Возможно ли это с помощью segue? - person Stef; 27.09.2017
comment
@Stef Вы можете использовать свойство configuration, чтобы получить начальную конфигурацию webView. WKWebsiteDataStore.default() возвращает одноэлементный объект. Вам просто нужно использовать этот синглтон для всех вновь созданных веб-представлений. - person Eldar Pikunov; 28.09.2017

На сайте яблока написано:

Если ваше приложение создает несколько веб-представлений, назначьте один и тот же объект WKProcessPool веб-представлениям, которые могут безопасно совместно использовать пространство процесса. Создайте экземпляр этого класса и назначьте его свойству processPool объекта WKWebViewConfiguration каждого веб-представления.

Однако вы установили свой processProtocol в класс ViewControler. Затем это переопределяется каждый раз при создании экземпляра представления. Сделай это:

import UIKit
import WebKit
let processPool = WKProcessPool()

class ViewController: UIViewController, WKNavigationDelegate { var webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()

    let configuration = WKWebViewConfiguration()
    configuration.processPool = WKProcessPool()

    webView.navigationDelegate = self
    view.addSubview(webView)
}
}
person Ian Pacheco    schedule 31.12.2020