【问题标题】:WKWebView & Swift 3 - set cookie using evaluateJavaScriptWKWebView & Swift 3 - 使用 evaluateJavaScript 设置 cookie
【发布时间】:2018-02-05 22:14:37
【问题描述】:

我一直在尝试使用 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: Optional(Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=0, WKJavaScriptExceptionMessage=SecurityError (DOM Exception 18): 操作不安全。, WKJavaScriptExceptionSourceURL=undefined, NSLocalizedDescription=A JavaScript发生异常,WKJavaScriptExceptionColumnNumber=0})

【问题讨论】:

  • 您使用的是网络服务器还是本地文件 (stackoverflow.com/a/2705057/2124535)?
  • 我正在使用一个网络服务器,Node.Js 服务于一个 Angular 应用程序
  • 试试这个解决方案:stackoverflow.com/a/26577303/2124535如果需要在创建webview后设置cookie,请查看第二种情况。
  • 谢谢,我会检查一下,但我不清楚您不想让我尝试什么用户解决方案?
  • 马特回复

标签: swift cookies wkwebview


【解决方案1】:

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

【讨论】:

  • 这为我节省了大量时间。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2014-12-21
  • 1970-01-01
  • 2014-12-31
  • 2018-12-01
相关资源
最近更新 更多