iOS:当参数包含换行符时,evaluateJavaScript将不会调用函数

问题描述:

目标是调用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

一种选择是逃避参数内换行字符:

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

如果你看到一个清晰的解决方案请张贴建议。