我想所有这些都会起作用。 但只有4个有效。其他的会产生“missing )”错误。
我运行过的所有“代码检查器”都声称“完全没有错误”。所有字符串文字都不包含任何单引号或双引号。
转义所有文本以避免所有错误的 secret 方法是什么。
<div onclick='alert("Bob's" );'> 1 works </div>
<div onclick="alert('Fred's' );"> 2 fails </div>
<div onclick='alert("Say " hi "");'> 3 fails </div>
<div onclick="alert('Say " hi "');"> 4 works </div>
<div onclick='alert("Bob's" );'> 5 works </div>
<div onclick="alert('Bob's' );"> 6 fails </div>
<div onclick='alert("Say " hi "" );'> 7 fails </div>
<div onclick="alert('Say " hi "' );"> 8 works </div>
最佳答案
在将字符串传递给 Javascript 之前,HTML 实体会被转换为其相应的字符。它们仅在 HTML 级别转义字符,而不是在 Javascript 级别转义。
所以第二个尝试执行 Javascript:
alert('Fred's');
其中包含不正确的嵌套引号。您需要包含 Javascript 转义序列来保护引用:
<div onclick="alert('Fred\'s' );">
这将执行 Javascript:
alert('Fred\'s');
这是有效的。
如果您正在寻找一种通用方法来生成始终可以正确转义的代码,而无需详细解析它,我认为没有。最好的解决方案不是首先将 Javascript 放入 HTML 属性中,而是使用不显眼的 Javascript。
<div id="fredalert">
<script>
document.querySelector("#fredalert").addEventListener("click", function() {
alert('Fred\'s');
});
</script>
关于javascript - 没有非法字符。没有单引号。没有双引号。但还是需要逃避,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51778025/