我一直在尝试使用Swift 3为WKWebView设置一个cookie,以便将设备令牌传递给服务器。
我一直试图设置cookie的代码如下:
wkWebView.evaluateJavaScript("document.cookie='access_token=your token';domain='your domain';") { (data, error) -> Void in
print("data: \(data)")
print("error2: \(error)")
wkWebView.reload()
}
但是,我被困在这里,因为此代码会产生以下错误输出:
error2:可选(错误域= WKErrorDomain代码= 4"发生JavaScript异常" UserInfo = {WKJavaScriptExceptionLineNumber = 0,WKJavaScriptExceptionMessage = SecurityError(DOM异常18):操作不安全。,WKJavaScriptExceptionSourceURL = undefined ,NSLocalizedDescription =发生JavaScript异常,WKJavaScriptExceptionColumnNumber = 0})
答案 0 :(得分:2)
我最后通过在运行时向WKWebView注入一个脚本来设置cookie,该脚本将Firebase设备令牌(我想要传递给我的服务器的字符串)设置为本地存储项。
我最终得到的代码如下;
在WKWebView中设置本地存储:
let addCookieScript="localStorage.setItem('device', '\(self.tokenFirebase)');\nconsole.log(localStorage.getItem('token'));\nconsole.log(localStorage.getItem('userId'));\n"
let script: WKUserScript = WKUserScript(source: addCookieScript as String, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
将脚本添加到WKWebView:
userContentController.addUserScript(script)
在此之后,只需要正常加载WKWebView,并通过Safari Developer Tool监控会话的本地存储