2017-08-28 169 views
0

我一直在尝试使用Swift 3为WKWebView设置cookie,以便将设备令牌传递给服务器。WKWebView&Swift 3 - 使用evaluateJavaScript设置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() 
} 

但是,我坚持在这里,因为这个代码产生以下错误的输出:

误差2:可选(错误域= WKErrorDomain代码= 4 “A JavaScript异常发生” 的UserInfo = {WKJavaScriptExceptionLineNumber = 0,WKJavaScriptExceptionMessage =的SecurityError(DOM异常18):该操作是不安全的,WKJavaScriptExceptionSourceURL =未定义,NSLocalizedDescription = A的JavaScript异常发生d,WKJavaScriptExceptionColumnNumber = 0})

+0

您使用的是Web服务器还是本地文件(https://stackoverflow.com/a/2705057/2124535)? – nathan

+0

我正在使用网络服务器,Node.Js服务于一个Angular应用程序 – lundzern

+0

请尝试此解决方案:https://stackoverflow.com/a/26577303/2124535如果您需要在创建webview后设置cookie,请检查第二个方案。 – nathan

回答

0

我最终通过注入脚本到WKWebView在运行时,它设定了火力地堡设备令牌,这是我想通过我的服务器字符串设置cookie,为本地存储物品。

我结束的代码如下;

设置在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开发工具本地会话存储