2016-10-27 34 views
0

目標是調用WKWebView中包含的網頁中的回調函數。iOS:當參數包含換行符時,evaluateJavaScript將不會調用函數

evaluateJavaScript當它的參數包含換行符時會中斷,這意味着回調函數永遠不會被調用。

這是爲什麼?

userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)在用戶按下網頁上的按鈕時被調用。這似乎是工作

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 
    let dict = message.body as! [String:AnyObject] 
    let callback = dict["callback"] as! String 

    // Fails 
    let serializedClipboard = "hello\n" 

    // Works 
    // let serializedClipboard = "hello" 

    webView!.evaluateJavaScript("\(callback)('\(serializedClipboard)')") { (object: Any?, error: Error?) -> Void in 
     print("Done invoking \(callback)") 
    } 
} 
+0

現在問題已經重新表達,似乎是逃避'evaluateJavaScript'裏面的換行符......一種選擇是編碼爲base64(然後在JavaScript端進行解碼),但是有沒有更清晰的方法通過換行符? – Crashalot

+0

你爲什麼要在回調參數中傳遞一個新行? –

+0

@VladimirM例如,如果您序列化一段文字。 – Crashalot

回答

2

一種選擇是逃避參數內換行字符:

let escapedClipboard = serializedClipboard.stringByReplacingOccurrencesOfString("\n", withString: "\\n") 

如果你看到一個清晰的解決方案請張貼建議。

相關問題