2017-08-28 263 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開發工具本地會話存儲