You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:04:29