Синтаксическая ошибка" unterminated template literal", когда литерал содержит тег скрипта [дубликат]

этот вопрос уже есть ответ здесь:

я использую литералы шаблонов ES6 для создания некоторого HTML в строках, и до сих пор он работал нормально. Однако, как только я попытаюсь поставить буквальный текст </script> в моей строке браузер выбрасывает и выбрасывает синтаксическую ошибку:

SyntaxError: Unterminated template literal

вот простой пример JavaScript, который выдает ошибку:

var str=`
<script>
</script>
`
var pre = document.createElement('pre')
pre.textContent = str
document.body.appendChild(pre)

см. приведенный выше код в JS Fiddle.

похоже, что происходит то, что он отказывается от поиска конечной буквальной цитаты и вместо этого начинает рассматривать все в точке как буквальный HTML, поэтому весь JavaScript после этой точки неправильно рассматривается как HTML, чего нет!

если я заменю script by любой другой юридический HTML-тег (и даже недопустимые теги, такие как scripty) тогда он работает просто отлично, поэтому я не вижу, как это может быть синтаксическая ошибка или странный случай, когда я думаю, что я набрал один символ (например, backtick), но вместо этого набрал другой, который выглядит почти так.

Я буквально создаю строку (насколько я понимаю, во время компиляции), браузер должен не попытайтесь обработать его как HTML или каким-либо образом проанализировать его. Так что происходит?

1 ответов


если вставить </script> внутри тега скрипта, независимо от того, является ли он строкой в кавычках, апострофах или даже литералом шаблона, он будет всегда закрыть тег script. Вы должны избежать этого, например, вот так:

var str=`
<script>
<\/script>
`
var pre = document.createElement('pre')
pre.textContent = str
document.body.appendChild(pre)

однако, если вы используете внешний скрипт <script src="url"></script>, он должен работать нормально без экранирования.