调用document.write()

时间:2011-08-31 10:14:41

标签: javascript document.write

此代码不起作用:

<div class="pix"><div id="addTimestamp"></div></div>
<script type="text/javascript">
(function () {
    var date = new Date(), 
        timestamp = date.getTime(),
        newScript = document.createElement("script");

    newScript.type = 'text/javascript';
    newScript.src = 'someUrl=' + timestamp + '?';
    document.getElementById('addTimestamp').appendChild(newScript);
}())
</script>

动态脚本添加document.write(someCode which loads banners)。但是在Firebug中我有一个错误:

  

忽略了从异步加载的外部脚本调用document.write()。

3 个答案:

答案 0 :(得分:4)

添加:

newScript.async = false;

您的脚本需要同步加载document.write()才能正常工作(请参阅https://developer.mozilla.org/En/HTML/Element/Script#attr-async)。正如您现在所拥有的那样,只要浏览器有时间,脚本就会加载 - 因此您无法知道将从document.write()插入HTML的位置。浏览器决定忽略您的document.write()电话,以防止出现更严重的问题。

答案 1 :(得分:1)

文档编写javascript导致html解析器在看到try

时失败
document.getElementById('addTimestamp').innerHTML = '<script type="text/javascript"     src="someUrl=' + timestamp + '?"' + 'charset="utf-8"></sc' + 'ript>';

但是,如果要在DOM中插入脚本标记,还需要确保已加载DOM。

答案 2 :(得分:0)

Levon,您似乎正在尝试克服页面加载速度的问题(我没有看到其他原因不能仅仅静态插入脚本)。

弗拉迪米尔的回答是好的和有效的,但请看我对他回答的评论。

另一种方法是有效,但应该非常谨慎地实现,是覆盖document.write本身。这是非常非常微妙的工作,需要进行彻底的测试,但实际上可以做到。每次调用document.write都可以存储某种字符串缓冲区。然后,通过以某种方式决定是时候刷新所有内容,只需将所有缓冲区内容插入到某个DOM元素中。

工作,但非常有意义。最好的选择是不要使用document.write。但是,唉,它并不总是一种选择。