Синтаксическая ошибка" 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>
, он должен работать нормально без экранирования.