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
。