【发布时间】:2011-02-03 06:57:52
【问题描述】:
document.write() 被调用时发生了什么坏事?
我听说过关于 document.write 对 DOM 或对 Javascript 库的使用产生不利影响的零碎消息。我面前有一个我怀疑相关的问题,但无法找到该方法造成的损害的简明摘要。
【问题讨论】:
标签: javascript dom
document.write() 被调用时发生了什么坏事?
我听说过关于 document.write 对 DOM 或对 Javascript 库的使用产生不利影响的零碎消息。我面前有一个我怀疑相关的问题,但无法找到该方法造成的损害的简明摘要。
【问题讨论】:
标签: javascript dom
使用document.write() 将破坏网页 - 破坏和覆盖整个 DOM - 如果在文档完成解析后调用它。这被认为是对document.write() 的不当使用,并且是/曾经是批评许多旧脚本的原因。
window.onload = function ()
{
document.write("Oops!");
}
一般来说,在解析时以同步方式向页面动态添加内容是可以接受的并且相当广泛地使用:
<div>
<script type="text/javascript">
document.write("Well I'll be, your browser supports JavaScript!");
</script>
</div>
它主要由广告发布服务用于将广告添加到页面,一些 Google API 也使用它。
【讨论】:
页面屏蔽,这就够了,否则就是使用不当的原因。
正如 Andy 所说,当您执行 document.write 时,它是同步的,这意味着您必须等待它才能继续页面的其余部分。
我不希望您的网站因为您的广告服务器停机而挂断。不幸的是,SO 就是这种情况,右侧的 AD 使用 document.write 使用来自另一台服务器的脚本,如果该脚本关闭,则会阻止页面加载,直到超时。由于document.write 和缓慢的(通常是第三方)广告服务器造成的这种延迟远经常是网站加载缓慢的原因。
侧面咆哮:广告让你从观看中赚钱,好吧,你需要谋生。但不要从技术角度依赖他们,因为他们的服务器已关闭,您的网站是 FUBAR...以非阻塞方式投放广告,除了 @987654323 之外还有很多方法@ 来实现这一点。
【讨论】:
127.0.0.1 ads.stackoverflow.com
ads.stackoverflow.com 似乎经常遇到麻烦(主要是格林威治标准时间早上)。不是document.write 的最佳用途。 :-)
document.write?
我只是想添加一个fiddle 来展示 Andy E 的实际示例。
基本上段落元素将不再可见,因为document.write() 覆盖了它。
【讨论】:
这个 sn-p 将证明它:
window.onload = function () {
document.write("Because I will overwrite everything.");
}
<p>Hello, I won't render anymore.</p>
【讨论】: