document.write实际上是否已被弃用?

时间:2012-09-24 22:59:56

标签: javascript

我已经看到一些关于document.write被弃用的喋喋不休,但我不确定这些信息来自何处。 I did look it up in MDN,但没有任何关于它被弃用的说法..所以现在我有点怀疑。不幸的是,谷歌没有太多帮助(也许我只是没有使用正确的搜索条件)。

如果确实已弃用,有人可以将我链接到相应的文档,表明它确实已被弃用吗?

3 个答案:

答案 0 :(得分:10)

没有。它通常被认为是不好的做法,几乎和eval一样被滥用。

阅读:Why is document.write considered a 'bad practice'?

从上述链接问题中引用一些重要观点:

  
      
  • document.write(以下称DW)在XHTML中不起作用

  •   
  • 页面加载完成后执行的DW会覆盖页面,或者写一个新页面,或者不能正常工作

  •   
  • DW执行遇到的地方:它无法在给定节点处注入

  •   

同样@JaredFarrish所说,deprecated主要是一种心态。这是一个很可能永远不会消失的遗物,否则会破坏许多网站 - 即使Traditional Google Analytics code使用DW。

显然,功能方面它早已被适当的DOM操作方法取代,并再次引用上面的链接问题:DW is effectively writing serialised text which is not the way the DOM works conceptually


为了平衡,这里列出了DW可能被认为合适的地方:

  • DW本身没有任何问题 - 如果您使用它,它不会破坏您的页面;
  • 它允许轻松地将外部脚本回退到本地副本,例如从CDN加载jQuery失败时:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/libs/jquery-1.8.2.min.js">\x3C/script>');</script>
    
  • 这是在保持代码简短(例如分析)的同时在页面中插入外部代码段的最简单方法之一。请注意,Google Analytics等系统现在支持异步方法 - 通过script API创建document.createElement元素,设置其属性并将其附加到DOM - 而不是使用传统的document.write方法

<强> TL; DR:
DW容易被误用,因此对于现实世界的使用,只要可行,就更喜欢适当的DOM操作方法。

答案 1 :(得分:3)

document.write何时可以?

有很多地方鼓励程序员避免document.write(即使HTML5 specification给它一个强烈的打击),这是一件好事,因为它是在这里引入的那些相当笨重的东西之一从未标准化甚至指定的Web脚本的开始,它已被其他方法取代。

但是,至少有一种情况可能会被视为有用。

不支持脚本的用户代理

许多网页都有数百kb的脚本,主要是因为开发人员只是放入库和插件而不考虑页面大小,因为它节省了几个小时的开发时间,开发人员认为他们的时间比他们的客户端更重要雇主的访客。

如果脚本被禁用或不可用,浏览器通常不会下载脚本,但有些可能会。使用脚本插入脚本意味着如果脚本不可用,脚本元素永远不会放在文档中,并且永远不会下载相关资源。

document.write是实现脚本加载器的一种非常简单的方法。当然,还有更复杂的脚本加载器可以做同样的事情,但是好的旧document.write已经基本无处不在,无处不在,为此目的,它可以像innerHTML一样轻松地完成工作。

鉴于innerHTML的广泛使用(甚至标记片段作为使用DOM方法创建元素的方法),使用类似的工具插入脚本似乎是合理的。

使用innerHTML插入不起作用

这与上面几乎相同,但有点不同。

使用innerHTML插入的脚本元素不会被执行,因此如果文档流是打开的,使用document.write而不是innerHTML是非常简单的。通常需要注意的是,在加载文档后使用document.write将首先删除当前文档,这并不总是(错误,几乎从不)。

弹出窗口

好的,每个人都讨厌弹出窗口并将它们与document.write结合起来似乎是最糟糕的最糟糕的。但有时候,document.write编写的内容的简单弹出窗口比更复杂的对话更简单,更快(包括开发和呈现)。

XHTML借口

document.write在非HTML文档(例如XML)中不起作用。但是,虽然网络上的许多页面都有XHTML DOCTYPE(可能是因为CMS更喜欢XML到HTML),但页面几乎总是作为文本/ HTML提供,因此浏览器会对它们进行处理。网络很可能很快就会转移到XML(即实际上作为XML的文档)。对于网页,DOCTYPE本质上是浏览器使用的一个标志,如果它应该处于标准模式,那么它就是一个标志模式。所以XML的东西有点像Phurphy。

然而,底线是document.write几乎不应该“在现实世界中”使用,因为DOM方法提供了标准化的替代方案,具有良好指定的行为并且几乎得到普遍支持。 document.write或多或少等同于eval,因为在某些罕见的情况下它很有用,但几乎总有一种更好的方法可以做。

答案 2 :(得分:0)

在W3C HTML5规范[W3C Recommendation 2014年10月28日第6.3.3节]中,document.write()仍然存在,https://www.w3.org/TR/html5/webappapis.html#document.write()虽然规范中有一个相当明确的警告,但结尾为...... “出于所有这些原因,强烈建议不要使用这种方法。”