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 监控会话的本地存储
我一直在尝试使用 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 监控会话的本地存储