5

此代码不起作用:

<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() 被忽略。

4

3 回答 3

4

添加这个:

newScript.async = false;

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

于 2011-08-31T10:19:24.593 回答
1

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

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

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

于 2011-08-31T10:26:05.780 回答
0

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

弗拉基米尔的回答很好且有效,但请参阅我对他回答的评论。

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

有效,但非常变态。最好的选择是根本不使用 document.write。但是,唉,它并不总是这样的选择。

于 2011-08-31T10:33:36.787 回答