我的Java项目基于WebView组件。 现在,我想用单个String参数调用一些JS函数。 为此,我使用简单的代码:
webEngine.executeScript("myFunc('" + str + "');");
* str文本来自texarea。
此解决方案有效,但不够安全。
有时我们可以获得netscape.javascript.JSException: SyntaxError: Unexpected EOF
那么,如何处理str
以避免异常?
答案 0 :(得分:2)
Letfar的答案在大多数情况下都有效,但不是全部,如果你出于安全原因这样做,那还不够。首先,反斜杠也需要转义。其次,line.separator属性是服务器端的EOL,它只是巧妙地与客户端相同,并且你已经逃避了这两种可能性,所以第二行不是必需的。
总而言之,无法保证某些其他控件或非ASCII字符不会出现某些浏览器问题(例如,查看当前Chrome中的URL错误)以及无法识别JavaScript的浏览器(想想像屏幕阅读器和其他辅助工具这样的东西)也可能试图解释HTML特殊字符,所以我通常会逃避[^ - 〜]和[\'“&<>](那些是正则表达式字符范围意味着所有字符不在空格和波浪号之间;并且反斜杠,单引号,双引号,&符号,小于,大于)。偏执?有点,但如果str是用户输入的字符串(或从用户输入的字符串计算),你需要有点偏执以避免安全漏洞。
当然,真正的答案是使用一些开源软件包来进行转义,由知道安全性的人编写,或者使用一个为你做这个的框架。
答案 1 :(得分:-1)
我找到了这个快速修复:
str = str.replace("'", "\\'");
str = str.replace(System.getProperty("line.separator"), "\\n");
str = str.replace("\n", "\\n");
str = str.replace("\r", "\\n");