Bas*_*ass 7 javascript ecma262
在上个世纪,有一个流行的"黑客"隐藏JavaScript从非启用JavaScript的浏览器:
<script type = "text/javascript">
<!--
alert("Hello, World!");
// --> Your browser doesn't support JavaScript
</script>
Run Code Online (Sandbox Code Playgroud)
尽管<!--在许多教程中解释为仅仅是单行JavaScript注释,但在ECMAScript标准中没有提及它(参见7.4注释).虽然是非标准的,但所有现代浏览器都支持这种类型的注释,因此您可以用它注释掉任何JavaScript代码:
<script type = "text/javascript">
<!-- alert("Hello, World!");
<!-- This is a comment
<!-- This is another comment
<!-- This is yet another comment
</script>
Run Code Online (Sandbox Code Playgroud)
但是,有一个例外:eval()功能.以下代码在Communicator 4.x/Mozilla/Opera(Presto)/ Safari/Chrome中正常工作,但在MSIE中导致语法错误:
<form action = "#">
<script type = "text/javascript">
function testEval() {
var s = "<!--\n";
s += "alert(\"eval() invoked\");\n";
s += "// -->"
eval(s);
}
</script>
<input type = "button" value = "Test eval()" onclick = "testEval();"/>
</form>
Run Code Online (Sandbox Code Playgroud)
基本上,与所有其他浏览器不同,MSIE失败了eval("<!--").
2个问题:
<!--在JavaScript中的状态是什么?它是否在任何(甚至过时的)JavaScript规范/文档中定义?或者现代浏览器是否保留了某种bug-by-bug兼容性?编辑:这已经得到了解答.eval()函数)是否应该被报告为Microsoft的错误?