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

JavaFX WebEngine中撇号与JS结合的语法错误解决求助

解决方案

方案1:使用JSObject.call传递参数(推荐)

这是最安全简便的方式,JavaFX会自动处理参数转义,无需手动操作,同时完整保留HTML结构:

// 获取JavaScript的window对象
JSObject window = (JSObject) webEngine.executeScript("window");
// 直接传递HTML字符串作为参数调用JS函数
window.call("updateChat", killedString);

替代原来直接拼接字符串到executeScript的写法,彻底避免引号、撇号导致的JS语法解析错误。

方案2:手动转义JS字符串特殊字符

如果必须拼接JS代码字符串,可通过工具方法转义JS字符串中的特殊字符,同时保留HTML标签语义:

转义工具方法

public static String escapeForJS(String htmlContent) {
    if (htmlContent == null) return "";
    StringBuilder result = new StringBuilder();
    for (char c : htmlContent.toCharArray()) {
        switch (c) {
            case '\'': result.append("\\'"); break;
            case '"': result.append("\\\""); break;
            case '\\': result.append("\\\\"); break;
            case '\n': result.append("\\n"); break;
            case '\r': result.append("\\r"); break;
            default: result.append(c); break;
        }
    }
    return result.toString();
}

使用方式

String escapedHtml = escapeForJS(killedString);
webEngine.executeScript("updateChat('" + escapedHtml + "')");

转义后,HTML中的单引号、双引号会被转换成JS可解析的转义序列,既不会破坏JS语法,也不会丢失HTML的结构和属性信息。

错误原因说明

当直接拼接含单引号/双引号的HTML字符串到JS代码时,会提前截断JS字符串,例如:
原HTML:<div class='user-msg'>I'm here</div>
拼接后JS代码:updateChat('<div class='user-msg'>I'm here</div>')
此时单引号会导致JS解析时认为字符串提前结束,触发netscape.javascript.JSException语法错误。通过上述方案转义后,这些特殊字符会被JS识别为字符串的一部分,而非语法符号。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:05:13