2011-09-29 51 views
2

我有一个JavaScript文件被动态添加到页面。如果我使用文件撰写,它工作正常:通过appendChild添加的Javascript似乎无法运行

<html> 
<head></head> 
<body> 
    <script type="text/javascript"> 
      var src = 'myDynamicScript.js'; 
      document.write('<scr' + 'ipt type="text/javascript" src="' + src + '"></scr' + 'ipt>'); 
    </script> 
</body> 
</html> 

不过,如果我使用的appendChild,如this answer概述,脚本会下载,但从来没有运行:

<html> 
<head></head> 
<body> 
    <script type="text/javascript"> 
      var src = 'myDynamicScript.js'; 
      var script = document.createElement("script"); 
      script.type = "text/javascript"; 
      script.src = src; 
      document.body.appendChild(script); 
    </script> 
</body> 
</html> 

我有一个简单的例子设置here (write)here (append)。我应该期望它运行,还是已知的行为?如果它应该,为什么不呢?

回答

3

你的脚本运行正常,你不能从它document.write。使用警报或其他东西来测试它,并完全避免使用document.write

+0

为什么我不能使用document.write(除了它是“邪恶的”)?我的意思是为什么在这种特殊情况下被禁止? – sprugman

+0

这不是禁止的,但它会在原始文档(即您的主页)已经**关闭**之后发生。当您执行后续的“写入()”操作时,原始页面将被丢弃。 – Pointy

+0

实际上,@Pointy似乎是相反的 - 据我所知,appendChild-ed脚本中的document.write永远不会发生或被主页以某种方式覆盖。如果我把它放在setTimeout中,那么我可以把它覆盖我的主页面。 – sprugman

1

如果可能的话,您应该避免使用avoid using document.write。有更好的方法include Javascript within Javascript

+1

'document.write'从一般的滥用(即:文本输出)中获得了不好的声誉。如果采取适当的谨慎措施,对于同步脚本加载来说是完全可行的。 – 2011-09-29 22:44:30

0

你的例子在Safari中适用于我。以下是一些问题:

您正在测试哪些浏览器? (猜测你在IE浏览器上遇到了问题。) 你是从服务器尝试这种方式,而不是将index.html拖入浏览器?
页面上还有什么可能会阻止myDynamicServer.js?
有东西被劫持window.onload?
您是否尝试将myDynamicServer.js添加到document.getElementsByTagName('BODY')[0]而不是document.body?

相关问题