我看到有些人在谈论document.write
已经被弃用,但我不确定这个信息来自哪里。我在MDN上查了一下, 但没有任何关于它被弃用的注释... 所以现在我有点怀疑。不幸的是,谷歌也没有提供太多帮助(也许我只是没有使用正确的搜索词)。
如果它确实被弃用了,有人可以给我链接到适当的文件,证明它确实被弃用了吗?
我看到有些人在谈论document.write
已经被弃用,但我不确定这个信息来自哪里。我在MDN上查了一下, 但没有任何关于它被弃用的注释... 所以现在我有点怀疑。不幸的是,谷歌也没有提供太多帮助(也许我只是没有使用正确的搜索词)。
如果它确实被弃用了,有人可以给我链接到适当的文件,证明它确实被弃用了吗?
阅读:为什么document.write被认为是“不良做法”?
引用上面链接问题中的一些重要观点:
document.write
(以下简称DW)在XHTML中无法工作页面加载完成后执行DW将覆盖页面,或者写入新页面,或者不起作用
DW在遇到时立即执行:它无法在给定节点点注入
正如@JaredFarrish所述,deprecated
主要是一种心态。它是一个遗物,很可能永远不会消失,否则它会破坏许多网站 - 即使是传统的Google Analytics代码也使用DW。
It allows for easily fallbacking an external script to a local copy such as when loading jQuery from a CDN fails:
<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>
It's one of the easiest ways to insert external snippets in your page while keeping the code short (e.g. analytics). Note that systems such as Google Analytics now favor the asynchronous method - creating a script
element through the document.createElement
API, setting its properties and appending it to the DOM - rather than using its traditional document.write
method.
简而言之:
DW 很容易被误用,因此在实际使用中,尽可能选择适当的 DOM 操作方法。
适当
是一个相当主观的观点。DW通常是一种快速而肮脏的完成工作的方式,类似于.innerHTML
。您会看到w3schools在许多页面示例中广泛使用DW,这是w3fools所不赞成的。除了外部JS回退之外,我真的想不出有什么东西不能轻松地用适当的DOM操作方法替换。即使GA现在也有一种异步方法,这是(主观上)更合适的。 - Fabrício Mattédocument.write
何时适用?有许多地方鼓励程序员避免使用document.write
(即使HTML5规范也不赞成它),这是一件好事,因为它是那些在网页脚本的最开始引入但从未标准化或指定的相当笨重的东西之一,并且已经被其他方法取代。
然而,仍然有至少一种情况可以考虑使用它。
许多网页有数百kb的脚本,主要是因为开发人员只是随意添加库和插件,没有考虑页面大小,因为这可以节省几个小时的开发时间,而开发人员认为他们的时间比客户或雇主的访问者更重要。
如果禁用或不可用脚本,则浏览器通常不会下载脚本,但某些浏览器可能会。使用脚本插入脚本意味着如果脚本不可用,则永远不会将脚本元素放置在文档中,相关资源也不会被下载。
document.write
是一种非常简单的实现脚本加载器的方法。当然,有更复杂的脚本加载器可以完成同样的事情,但是老旧的document.write
基础、适用于任何地方,并且对于这个目的来说,像innerHTML一样轻松地完成工作。
考虑到innerHTML的广泛使用(甚至将标记片段作为使用DOM方法创建元素的方法),使用类似的工具插入脚本似乎是合理的。
这与上面的几乎相同,但略有不同。
使用innerHTML插入的脚本元素不会执行,因此如果文档流处于打开状态,则使用document.write
代替innerHTML非常容易。然而,通常的警告仍然适用,即在文档加载后使用document.write
将首先删除当前文档,这通常(嗯,几乎从不)不是期望的结果。
好的,大家都讨厌弹出窗口,结合document.write
似乎是最糟糕的。但有时,通过document.write
编写内容的简单弹出窗口比更复杂的对话框更简单快速(开发和展示都是如此)。
document.write
在非HTML文档(例如XML)中不起作用。但是,虽然Web上的许多页面具有XHTML DOCTYPE(可能是因为CMS更喜欢XML而不是HTML),但这些页面几乎总是作为text/HTML提供的,因此浏览器会将它们视为HTML处理。网络很难立即转向XML(即实际作为XML提供的文档)。对于网页,DOCTYPE基本上是浏览器用来确定是否应处于标准模式的标志,因此XML问题有点无关紧要。
document.write
几乎不应在“现实世界”中使用,因为 DOM 方法提供了一个标准化的替代方案,具有良好的规范行为,并且几乎被普遍支持。 document.write
或多或少等同于 eval
,在某些罕见情况下它是有用的,但通常有更好的方法来解决问题。