Как установить элемент localStorage в webView перед загрузкой URLRequest? - PullRequest
0 голосов
/ 06 января 2019

Мне нужно получить доступ к веб-странице с токеном на локальном хранилище

let javascript = "localStorage.setItem('token', 'abc')"
let url = URL(string: "https://test.com/abc")
webView.evaluateJavaScript(javascript) { (_, err) in
        print(err?.localizedDescription)
        // This will return 'A JavaScript exception occurred'
    }
let request = URLRequest(url: url!)
webView.load(request)

Ответы [ 2 ]

0 голосов
/ 08 января 2019

я решаю это, но я считаю, что это плохая практика, и правильным способом была возможность отправлять токен в заголовке запроса

основная проблема заключалась в том, что вы не можете запустить скрипт javascript, который добавляет элемент localStorage перед загрузкой веб-представления, поэтому мне пришлось подождать, пока загрузится эта страница, затем запустить скрипт javascript, который добавляет необходимый токен, и перезагрузить эту страницу. Вот мой код, но опять же, это плохая практика, я думаю, и я считаю, что команда переднего конца должна позволить мне завершить этот токен в заголовке запроса Во-первых, это был способ перезагрузить веб-представление только один раз

var loaded = false
func load() {
    if !loaded {
        webView.reload()
    }
    loaded = true
}

тогда мне пришлось подтвердить делегату WKNavigationDelegate перезагрузить эту страницу, когда она будет загружена, и вот мой код

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript(javascript) { (_, err) in
            self.load()
        }

    }
}
0 голосов
/ 06 января 2019

Я не думаю, что это возможно. Вы получаете эту ошибку:

Error Domain=WKErrorDomain Code=4 
"A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=0, 
WKJavaScriptExceptionMessage=SecurityError: The operation is 
insecure., WKJavaScriptExceptionColumnNumber=0, 
NSLocalizedDescription=A JavaScript exception occurred}

И вы ничего не можете сделать для WKWebView.

...