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

时间:2016-10-27 19:05:08

标签: javascript ios swift wkwebview wkwebviewconfiguration

目标是在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)")
    }
}

1 个答案:

答案 0 :(得分:2)

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

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

如果您看到更清洁的解决方案,请发布建议。