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
相关产品推荐
相关产品推荐

