此代码不起作用:
<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()。
答案 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。但是,唉,它并不总是一种选择。