嵌套脚本标记,2种方法的比较

时间:2015-08-02 15:56:17

标签: javascript

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

<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:分开单词&#34; script&#34;在嵌套脚本中:

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

我是否正确,两种选择都可以接受?

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

编辑:我提到这两个选项而不是document.createElement(&#39; script&#39;);因为我正在比较足够多才能处理其他嵌套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>');
}

提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果您只需要加载脚本但不关心它是同步加载还是异步加载,那么createElement更加清晰:

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

这种方法将异步加载,而你的同步加载。

答案 1 :(得分:1)

  

选项1:逃避正斜杠

没有。你不需要逃避所有正斜杠。您只需要以某种方式拆分</script>标记,标准方法是在开始<后立即反斜杠。

所以只使用

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

(当然,如果你没有做任何动态的事情,比如计算网址或只选择加载脚本,就没有理由“嵌套”脚本元素,只需将它静态地放入你的文档中)