加载URLRequest之前如何在webView中设置localStorage项目?

时间:2019-01-06 12:57:16

标签: ios swift wkwebview

我必须访问在localStorage上具有令牌的网页

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 :(得分:0)

我认为这是不可能的。您收到此错误:

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,您无能为力。

答案 1 :(得分:0)

  

我解决了这个问题,但我认为这是一种不好的做法,正确的方法是能够在请求的标头中发送令牌

主要问题是您无法运行在加载Web视图之前添加本地存储项的javascript脚本,因此我不得不等到加载该页面后再运行添加所需令牌的javascript脚本,然后重新加载该页面,这是我的代码,但我仍然认为这是错误的做法,我认为前端团队应允许我在请求标头中结束该令牌 拳头有一种方法可以只重新加载一次Web视图

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()
        }

    }
}