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

iOS:evaluateJavaScript在参数包含换行符时不会调用函数,javascript,ios,swift,wkwebview,wkwebviewconfiguration,Javascript,Ios,Swift,Wkwebview,Wkwebviewconfiguration,目标是在WKWebView中包含的网页内调用回调函数 evaluateJavaScript在其参数包含换行符时中断,这意味着永远不会调用回调函数 为什么会这样 userContentController(uusercontentcontroller:WKUserContentController,didReceive message:WKScriptMessage)在用户按下网页上的按钮时被调用 func userContentController(_ userContentController

目标是在
WKWebView
中包含的网页内调用回调函数

evaluateJavaScript
在其参数包含换行符时中断,这意味着永远不会调用回调函数

为什么会这样

userContentController(uusercontentcontroller: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)")
    }
}

一个似乎有效的选项是转义参数中的换行符:

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

如果您看到更干净的解决方案,请发表建议。

一个似乎有效的选项是转义参数中的换行符:

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

如果你看到一个更干净的解决方案,请发表建议。

现在这个问题已经重新表述,似乎是要避开
evaluateJavaScript
中的换行符。。。一个选项是编码到base64(然后在JavaScript端解码),但是有没有更干净的方法来传递换行符?为什么要在回调参数中传递换行符?@VladimirM,例如,如果要序列化一段文本。啊,实际上您想转义\n。人们似乎同意你的方法。现在这个问题已经重新表述了,似乎是要避开
evaluateJavaScript
中的新行。。。一个选项是编码到base64(然后在JavaScript端解码),但是有没有更干净的方法来传递换行符?为什么要在回调参数中传递换行符?@VladimirM,例如,如果要序列化一段文本。啊,实际上您想转义\n。人们似乎同意你的方法。这一方法的一个大问题是并非所有的换行符都是
\n
。这一方法的一个大问题是并非所有的换行符都是
\n