我正在使用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,而不是! / p>
如果我将script
替换为任何其他合法的HTML标记(甚至是scripty
之类的无效标记),那么它的工作正常,所以我看不出这是怎么回事可能是一个语法错误或一个奇怪的情况,我认为我键入了一个字符(例如反引号),而是键入另一个看起来几乎像它。
我实际上是在创建一个字符串(根据我的理解,在编译时),浏览器应该不试图将其视为HTML或以任何方式解析它。那是什么给出了什么?
答案 0 :(得分:31)
如果您在脚本标记中插入</script>
,无论它是引号,撇号还是模板文字中的字符串,它都始终关闭脚本标记。你必须逃避它,例如:
var str=`
<script>
<\/script>
`
var pre = document.createElement('pre')
pre.textContent = str
document.body.appendChild(pre)
但是,如果您使用外部脚本<script src="url"></script>
,它应该可以正常工作而不会转义。