目标是在WKWebView
内包含的网页内调用回调函数。
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 :(得分:2)
似乎有效的一个选项是转义参数中的换行符:
let escapedClipboard = serializedClipboard.stringByReplacingOccurrencesOfString("\n", withString: "\\n")
如果您看到更清洁的解决方案,请发布建议。