Swift中WKWebView evaluateJavaScript使用反斜杠的问题
解决Swift中WKWebView执行JS时反斜杠转义的问题
这问题我之前也踩过坑,核心就是双层字符串转义搞的鬼,咱们一步步理清楚:
问题根源
你写的代码里,Swift字符串中的\\会被解析成单个\,传到JS里就变成了"test\test"——而JS里的\t是制表符转义序列,所以实际传递给输入框的内容是"test[制表符]est",这就导致反斜杠没显示,第二个test的t被当成制表符的一部分,看起来像是被删掉了。
两种解决方案
要在JS里得到一个真正的反斜杠,得处理两层转义:Swift层面的转义,加上JS层面的转义,下面两种方法都能搞定:
方案1:手动双重转义
直接在Swift字符串里写四个反斜杠\\\\,让两层转义后最终得到单个反斜杠:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { self.webView.evaluateJavaScript("document.getElementById('_ValueTextBox').value = \"test\\\\test\"", completionHandler: { (result, error) in print("result \(result)...") }) }
这里的\\\\经过Swift解析后变成\\,传到JS里又会被解析成单个\,最终输入框就能正确显示test\test。
方案2:用Swift Raw String简化操作
Swift的Raw String(用#包裹)不会解析内部的转义序列,所以你只需要写两个反斜杠就够了,代码更直观不容易错:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { let jsCode = #""" document.getElementById('_ValueTextBox').value = "test\\test" """# self.webView.evaluateJavaScript(jsCode, completionHandler: { (result, error) in print("result \(result)...") }) }
验证效果
修改后运行代码,输入框里就能正常显示test\test,不会再出现反斜杠消失或字符被截断的问题了。
内容的提问来源于stack exchange,提问作者paul590
相关产品推荐
相关产品推荐

