WKWebView& Swift 3 - 使用evaluateJavaScript设置cookie

时间:2017-08-28 15:24:55

标签: swift cookies wkwebview

我一直在尝试使用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})

1 个答案:

答案 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监控会话的本地存储