[英]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.