document.write() 造成了什么损害?

IT技术 javascript dom
2021-02-20 14:13:07

此刻document.write()什么不好的事情被调用?

我听说过一些关于document.write对 DOM 或 Javascript 库的使用产生不利影响的消息。我有一个问题摆在我面前,我怀疑它是相关的,但无法找到该方法造成的损害的简明摘要。

4个回答

如果在文档解析完成后调用它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 也使用它。

页面阻塞,这就足够了,或者是使用不当的原因。

正如安迪所说,当您执行 document.write 时,它​​是同步的,这意味着您必须等待它才能继续执行页面的其余部分。

我不希望您的网站因为您的广告服务器宕机而挂断。不幸的是,SO 就是这种情况,正确使用 document.write 的 AD 使用来自另一台服务器的脚本,如果关闭,则会阻止页面加载,直到超时。这种延迟的原因的,document.write和慢(通常第三方)广告服务器是远远往往一个网站加载缓慢的原因。

旁白:广告让你从观看中赚钱,好吧,你需要谋生。但是不要从技术角度依赖他们,因为他们的服务器已关闭,您的网站是 FUBAR ......以非阻塞方式做广告,除了document.write实现这一点还有很多方法

我写了一个允许你异步加载 document.write 脚本的库:github.com/iamnoah/writeCapture
2021-04-23 14:13:07
writeCapture 适用于 3rd 方脚本(几乎每个广告服务器都使用 document.write)。此外,您不必将 jQuery 与 writeCapture 结合使用。
2021-04-28 14:13:07
侧面咆哮+1,ads.stackoverflow.com似乎经常遇到问题(主要是格林威治标准时间的早晨)。不是最好的用法document.write:-)
2021-04-29 14:13:07
是的,我厌倦了这里阻止页面其余部分的广告,所以我现在127.0.0.1 ads.stackoverflow.com在我的主机文件中
2021-05-06 14:13:07
@noah - 但问题是,如果你引入 jQuery,你为什么要使用document.write
2021-05-10 14:13:07

我只是想添加一个小提琴来展示安迪 E 的意思的现场示例。

基本上段落元素将不再可见,因为document.write()覆盖了。

这个片段将证明这一点:

window.onload = function () {
  document.write("Because I will overwrite everything.");
}
<p>Hello, I won't render anymore.</p>