【问题标题】:What damage is done by document.write()? [duplicate]document.write() 造成了什么损害? [复制]
【发布时间】:2011-02-03 06:57:52
【问题描述】:

document.write() 被调用时发生了什么坏事?

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

【问题讨论】:

    标签: javascript dom


    【解决方案1】:

    使用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 也使用它。

    【讨论】:

      【解决方案2】:

      页面屏蔽,这就够了,否则就是使用不当的原因。

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

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

      侧面咆哮:广告让你从观看中赚钱,好吧,你需要谋生。但不要从技术角度依赖他们,因为他们的服务器已关闭,您的网站是 FUBAR...以非阻塞方式投放广告,除了 @987654323 之外还有很多方法@ 来实现这一点。

      【讨论】:

      • 是的,我厌倦了这里的广告屏蔽了页面的其余部分,所以我现在在我的 hosts 文件中添加了 127.0.0.1 ads.stackoverflow.com
      • +1 表示一边咆哮,ads.stackoverflow.com 似乎经常遇到麻烦(主要是格林威治标准时间早上)。不是document.write 的最佳用途。 :-)
      • 我写了一个库,可以让你异步加载 document.write 脚本:github.com/iamnoah/writeCapture
      • @noah - 但问题是,如果你要引入 jQuery,你为什么要使用 document.write
      • writeCapture 与 3rd 方脚本一起使用(几乎所有的广告服务器都使用 document.write)。此外,您不必将 jQuery 与 writeCapture 一起使用。
      【解决方案3】:

      我只是想添加一个fiddle 来展示 Andy E 的实际示例。

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

      【讨论】:

        【解决方案4】:

        这个 sn-p 将证明它:

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

        【讨论】:

          猜你喜欢
          • 2015-09-04
          • 1970-01-01
          • 2013-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-15
          • 2014-06-17
          • 2016-07-05
          相关资源
          最近更新 更多