Чтение данных локального хранилища с помощью WKWebView - PullRequest
0 голосов
/ 21 января 2020

Мне нужно прочитать значение, хранящееся в локальном хранилище WKWbview. Я попытался использовать приведенный ниже код, но получил ноль. Я могу записывать значения в локальное хранилище, но сталкиваюсь с трудностями при чтении значений из него.

  let script = "localStorage.getItem('token')"
        wkWebView.evaluateJavaScript(script) { (token, error) in
            print("token = \(token)")
        }

Код инициализации WKWebView:

    // 1
    let accessToken = UserDefaults.standard.value(forKey: "token") as? String
    // 2
    let refreshToken = UserDefaults.standard.value(forKey: "RefreshToken") as? String
    // 3
    let configuration = WKWebViewConfiguration()
    // 4
    let contentController = WKUserContentController()
    let accessTokenScript = "javascript: localStorage.setItem('token', '\(accessToken!)')"
    // 5
    let userAccessTokenScript = WKUserScript(source: accessTokenScript, injectionTime: WKUserScriptInjectionTime.atDocumentStart, forMainFrameOnly: false)

    // 6
    contentController.addUserScript(userAccessTokenScript)
    configuration.userContentController = contentController
    self.wkWebView = WKWebView(frame: controller.view.bounds, configuration: configuration)

1 Ответ

2 голосов
/ 22 января 2020

Вам нужно внедрить этот скрипт, когда веб-сайт уже загружен:

  • вашему WKWebView необходимо назначить navigationDelegate

    webView.navigationDelegate = self

  • внедрить скрипт, когда сайт полностью загружен

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

    //you might want to edit the script, with the escape characters
    let script = "localStorage.getItem(\"token\")"
    wkWebView.evaluateJavaScript(script) { (token, error) in
        print("token = \(token)")
    }
}
...