我对document.write
有疑问。现在,我有一个动态加载脚本的页面。因此,我使用document.createElement
创建<script>
。在javascript文件中,我使用document.write
创建了dom
或iframe
元素。但它并不适用于所有浏览器。为什么不呢?
主页代码:
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 :(得分: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);
答案 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()已被调用。在 更多的情况下,方法很简单 忽略,或抛出异常。至 更糟糕的是,确切的行为 在某些情况下,这种方法可以 依赖于网络延迟,其中 会导致非常失败 很难调试。出于所有这些原因, 强烈使用这种方法 灰心。**