2011-06-30 44 views
2

我有一个document.write的问题。现在,我有一个页面来动态加载脚本。所以,我用document.createElement来创建一个<script>。在javascript文件中,我使用document.write来创建一个domiframe元素。但它不适用于每个浏览器。为什么不?Javascript:在createElement脚本中运行“document.write”失败

代码在主页:

var script = document.createElement('script'); 
script.setAttribute('src', 'http://yoururl/test.js'); 
document.getElementsByTagName('head')[0].appendChild(script); 

代码脚本test.js:

(function(){document.write('hello');})(); 
+0

什么是“剂量不工作”是什么意思?它如何失败?它是否会让你的电脑崩溃,或者没有任何东西被写入,或者某些东西被写入了50%的时间,还是写入了IE6而不是IE 5.5 Mac,或者......?更多的描述在这里会非常有帮助。 – Domenic

+0

[document.write](http://www.w3。HTML5规范草案中涵盖了org/TR/html5/apis-in-html-documents.html#document.write)。文档加载完成后不应使用它。也没有必要把它包装在立即执行的表达式中(这样做不是有害的,只是没有意义)。 – RobG

回答

4

运行网页加载完成将创建一个新页面,并覆盖所有的后任何文件撰写声明当前页面的内容。这几乎不是你打算发生的事情。

http://javascript.about.com/library/blwrite.htm

如果你想创建一个DOM元素,做这种方式,并追加到文档(或要素):

var elem = document.createElement('iframe'); 
elem.src = "http://www.google.com"; 
document.getElementById('myContainer').appendChild(elem); 

https://developer.mozilla.org/en/DOM/document.createElement

+0

Thx为您提供帮助,但我的问题在页面加载后不会发生。在window.onload之前,document.write不起作用。但是,谢谢你们。 – Zodiac

2

您要添加的新脚本元素头部。内容不显示,所以即使document.write调用成功,您将看不到文本。

如果你想要显示的内容,你必须将它添加到身体(作为子女或后裔),所以移动脚本机体:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<title>Document.write test</title> 
<body> 
    <div> 
    <script type="text/javascript"> 
     var script = document.createElement('script'); 
     script.src = 'http://yoururl/test.js'; 
     document.getElementsByTagName('div')[0].appendChild(script); 
    </script> 
    </div> 
    ... 
</body> 

请注意,您还必须有一个document.write完成后的有效文件。

以上在Firefox 5不起作用,但在IE 6不会注意警告在HTML5规范有关document.write

这种方法具有非常特殊行为。在某些情况下,此方法可能会影响HTML分析器的状态,同时分析器正在运行 ,导致DOM 不对应于 文档的来源。在其他情况下,呼叫可以首先清除当前页面,就好像 document.open()已被调用。在 还有更多的情况下,该方法简单地被 忽略,或者抛出异常。对于 更糟的是,这种方法的确切行为 在某些情况下可能是 ,这取决于网络延迟,这可能会导致很难调试的故障。由于所有这些原因, 使用这种方法是强烈 劝阻。**

相关问题