Как поместить "</script>" в строку javascript?

Я пробовал некоторые трюки в javascript и пришел к смешной проблеме: я не могу использовать <script> как подстроку в строке javascript! Вот пример:

<html>
    <head>
        <script>
            alert("<script></script>");
        </script>
    </head>
</html>

Предполагается напечатать <script></script>, но вместо этого я получаю следующее:

");

Отпечатано на странице, как HTML.

Вопрос: Как я могу использовать <script>, а затем подстроки </script> в String в Javascript, почему это так действует?

Вот JSFiddle:

Ответ 1

Что вы можете отключить, это </script>. Парсер HTML не распознает строки Javascript или вложенные теги <script>, поэтому он интерпретирует это как закрывающий тег для начального <script>. То есть эта часть документа анализируется как:

<script>                (open tag)
    alert("<script>     (text node - contents of the script)
</script>               (close tag)
");                     (text node - plain text)

Второй </script> игнорируется, так как нет другого тега <script> для его закрытия.

Чтобы обойти это, раскройте </script, чтобы анализатор HTML не видел его. Например:

alert("<script><\/script>");

или

alert("<script><" + "/script>");

или просто поместите код во внешний файл Javascript. Эта проблема возникает только для встроенных скриптов.

Ответ 2

Это из-за \ Я верю. У меня нет конкретного объяснения, так как я новичок в Javascript, но этот код должен работать:

alert("<script><\/script>");

придумал это с использованием знаний Java. Ха-ха, так как \ - это ключ эвакуации на многих языках.