Every JavaScript bundler handles inline script tags wrong
7 days ago
- #Web Development
- #HTML
- #JavaScript
- JavaScript可以通过外部文件(使用带有src属性的<script>标签)或在<script>标签内联的方式嵌入到网页中。
- 内联的<script>标签越来越多地用于自包含的应用程序和HTML工件,但也存在一些陷阱,比如字符串'</script>'可能会提前结束脚本。
- HTML规范中包含一个“脚本数据双重转义状态”的漏洞,其中像<!--后跟<script>这样的序列可以阻止正常的脚本终止。
- JavaScript构建工具和压缩工具在处理内联<script>标签中文字和表达式里有问题的字符串(如</script>、<!--)时,常常无法正确地处理转义。
- 在测试的工具中,ESBuild表现最佳,但在文字中仍无法转义<!--;其他工具如Terser、SWC、Oxc、Bun、UglifyJS、Closure Compiler和minify等也在不同方面存在失败。
- 目前没有JavaScript构建工具能够正确处理内联<script>标签的所有情况,这凸显了需要更好地认识和处理这些边缘情况。