嵌套脚本标签,两种方法的比较

Nested Script Tags, Comparison of 2 Approaches

本文关键字:方法 比较 两种 脚本 标签 嵌套      更新时间:2023-09-26

避免以下代码中的第一个脚本标签过早关闭:

<script type="text/javascript">
document.write('<script type="text/javascript" src="file.js"></script>');
</script>
从我读过的

来看,两种常见的方法(我知道还有其他的)是:

选项1:转义嵌套脚本中的正斜杠:

document.write('<script type="text'/javascript" src="file.js"><'/script>');

选项2:分隔嵌套脚本中的"script"字:

document.write('<scr' + 'ipt type="text/javascript" src="file.js"></scr' + 'ipt>');

两个选项都可以接受,我说的对吗?

第一种方法似乎更简单,但我想如果嵌套脚本中有几行代码,那么第二种方法可能比转义大量正斜杠(或引号)更麻烦。

编辑:我提到这两个选项,而不是document.createElement('script');因为我比较的方法是通用的,足以处理其他嵌套的javascript示例。例如,像这样:

<script type="text/javascript">
if (/iPhone/).test(navigator.userAgent)
{
  document.write('<script type="text/javascript">');
  document.write('function myFunction () {');
  // Some stuff for iPhone
  document.write('}');
  document.write('myFunction();');
  document.write('</script>');
}

提前感谢!

选项1:转义正斜杠

。您不需要转义所有正斜杠。您只需要以某种方式将</script>标记分开,标准的方法是在开头的<后面加上一个反斜杠。

所以只用

document.write('<script type="text/javascript" src="file.js"><'/script>');

(当然,如果你不做任何动态的事情,比如计算url或选择性地加载脚本,没有理由"嵌套"脚本元素,只是把它静态地放到你的文档中)

如果你只需要加载脚本,但不关心它是同步加载还是异步加载,一个更干净的选择是createElement:

var sc = document.createElement('script');
sc.setAttribute('src', 'file.js');
sc.setAttribute('type', 'text/javascript');
document.head.appendChild(sc);

此方法将异步加载,而您的方法将同步加载。