避免以下代码中的第一个脚本标签过早关闭:
<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);
此方法将异步加载,而您的方法将同步加载。