Javascript:在createElement脚本中运行“document.write”失败

时间:2011-06-30 05:13:16

标签: javascript

我对document.write有疑问。现在,我有一个动态加载脚本的页面。因此,我使用document.createElement创建<script>。在javascript文件中,我使用document.write创建了domiframe元素。但它并不适用于所有浏览器。为什么不呢?

主页代码:

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

脚本test.js中的代码:

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

2 个答案:

答案 0 :(得分:4)

在页面加载完成后运行的任何document.write语句都将创建一个新页面并覆盖当前页面的所有内容。这几乎肯定不是你打算发生的事情。

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

答案 1 :(得分:2)

您正在 head 中添加新的脚本元素。 head 中的内容不会显示,因此即使 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()已被调用。在   更多的情况下,方法很简单   忽略,或抛出异常。至   更糟糕的是,确切的行为   在某些情况下,这种方法可以   依赖于网络延迟,其中   会导致非常失败   很难调试。出于所有这些原因,   强烈使用这种方法   灰心。**