WKWebView & Swift 3 - 使用 evaluateJavaScript 设置 cookie

WKWebView & Swift 3 - set cookie using evaluateJavaScript

我一直在尝试使用 Swift3 为 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: Optional(Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=0, WKJavaScriptExceptionMessage=SecurityError (DOM Exception 18): The operation is insecure., WKJavaScriptExceptionSourceURL=undefined, NSLocalizedDescription=A JavaScript exception occurred, WKJavaScriptExceptionColumnNumber=0})

我最终通过在运行时将脚本注入 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 监控会话的本地存储