繁体   English   中英

调用document.write()

[英]Invoking 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()被忽略。

添加:

newScript.async = false;

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

撰写JavaScript的文档会导致HTML解析器在尝试查看时失败

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

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

Levon,看来您正在尝试克服页面加载速度方面的问题(我看不出其他原因不是仅静态插入脚本)。

弗拉基米尔的答案很好,也很有效,但请看我对他的答案的评论。

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

可行,但很平凡。 最好的选择是根本不使用document.write。 但是,a,并非总是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM