崩溃浏览器的变量字符串

Sim*_*ler 8 javascript browser

我觉得很奇怪.当你在html页面中放置这样的东西时,浏览器(在FF和Chrome上测试)就会停止在这个地方渲染页面:

        <script type="text/javascript">
        // var Crash = "<!--<SCRIPT>";
        </script>
Run Code Online (Sandbox Code Playgroud)

显然你也可以这样做:

        <script type="text/javascript">
        var Crash = "<!--<SCRIPT>";
        </script>
Run Code Online (Sandbox Code Playgroud)

要么:

        <script type="text/javascript">
         var Crash = "<!-- WHATEVER YOU WANT HERE <SCRIPT>";
        </script>
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

Jam*_*rpe 5

TL; DR:

不要这样做 - 它使得解析器遵循一些关于双重​​转义脚本数据的奇怪规则,在它到达时将其置于"错误"状态(从您的角度来看)</script>.有一些方法可以在脚本数据中转义,以确保它能够按照您的意愿运行,同时不会破坏解析器.


解析器在解析页面时遵循一套严格的规则.在这种情况下:

所以我们现在处于一种状态,浏览器认为它仍然在一些转义的脚本数据中,而不是原始<script>标签已被关闭,所以任何进一步的HTML都不会被视为这样 - 它仍然认为它的脚本数据被传递给脚本引擎而不是HTML处理.

解析器以这种方式工作的原因尚不清楚,但随着时间的推移,事情的发展方式,可能是因为一些可怕的向后兼容性原因.