Когда браузер видит </script>
, он считает это концом блока скрипта (поскольку анализатор HTML не имеет представления о JavaScript, он не может различить то, что просто появляется в строке, и то, что фактически означало для завершения элемента скрипта). Так что </script>
, появляющийся буквально в JavaScript, который находится внутри HTML-страницы, (в лучшем случае) вызовет ошибки и (в худшем случае) станет огромной дырой в безопасности.
Вот почему вы так или иначе должны предотвратить появление этой последовательности символов. Другие распространенные обходные пути для этой проблемы - "<"+"/script>"
и "<\/script>"
(все они сводятся к одному и тому же).
Хотя некоторые считают это «ошибкой», на самом деле должно произойти таким образом, поскольку, согласно спецификации 1014 *, HTML-часть пользовательского агента полностью отдельно от скриптового движка. В теги <script>
можно помещать все виды вещей, а не только JavaScript. W3C упоминает VBScript и TCL в качестве примеров. Другой пример - шаблонный плагин jQuery , который также использует эти теги.
Но даже в JavaScript, где вы можете предположить, что такой контент в строках можно распознать и, следовательно, не рассматривать как конечные теги, возникает следующая двусмысленность при рассмотрении комментариев:
<script type="text/javascript">foo(42); // call the function </script>
* * & 1 022 Ndash; что должен делать браузер в этом случае?
И, наконец, как насчет браузеров, которые даже не знают JavaScript? Они просто игнорировали бы часть между <script>
и </script>
, но если бы вы дали разную семантику последовательности символов </script>
на основе знаний браузеров о JavaScript , у вас бы внезапно получились два разных результата на этапе разбора HTML .
Наконец, относительно вашего вопроса о замене всех угловых скобок: я бы сказал, по крайней мере, в 99% случаев, это для запутывания, то есть для сокрытия (от антивирусного программного обеспечения, цензуры прокси ( как в вашем примере (вложенные парены - это круто)) и т. д.) тот факт, что ваш JavaScript выполняет какие-то HTML-операции. Я не могу придумать веских технических причин, чтобы скрыть что-либо, кроме </script>
, по крайней мере, для разумно современных браузеров (и под этим я подразумеваю что-то более новое, чем Mosaic).