Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.write实际上是否已弃用?_Javascript - Fatal编程技术网

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

Javascript document.write实际上是否已弃用?,javascript,Javascript,我看到一些关于文档的闲聊。write被弃用,但我不确定这些信息的确切来源,但是没有任何关于它被弃用的注释。。所以现在我有点怀疑。不幸的是,谷歌也帮不上什么忙(也许我只是没有使用正确的搜索词) 如果它确实被弃用了,有人能将我链接到显示它确实被弃用的适当文档吗?没有。这通常被认为是不好的做法,几乎与eval一样被误用 阅读: 引述上述相关问题中的一些要点: document.write(此后为DW)在XHTML中不起作用 页面加载完成后执行的DW将覆盖页面,或写入新页面,或无法工作 DW在遇到的地

我看到一些关于
文档的闲聊。write
被弃用,但我不确定这些信息的确切来源,但是没有任何关于它被弃用的注释。。所以现在我有点怀疑。不幸的是,谷歌也帮不上什么忙(也许我只是没有使用正确的搜索词)


如果它确实被弃用了,有人能将我链接到显示它确实被弃用的适当文档吗?

没有。这通常被认为是不好的做法,几乎与
eval
一样被误用

阅读:

引述上述相关问题中的一些要点:

  • document.write
    (此后为DW)在XHTML中不起作用

  • 页面加载完成后执行的DW将覆盖页面,或写入新页面,或无法工作

  • DW在遇到的地方执行:它不能在给定的节点点注入

正如@JaredFarrish所说,
不推荐的
主要是一种心态。这是一个很可能永远不会消失的遗迹,否则它会破坏许多站点——甚至是使用DW的站点

显然,就功能而言,它早已被适当的DOM操作方法所取代,并再次引用了上面的相关问题:
DW有效地编写了序列化文本,而这在概念上不是DOM的工作方式


为了平衡,这里列出了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>
    
    
    window.jQuery | | document.write('\x3C/script>');
    
  • 这是在页面中插入外部代码片段的最简单方法之一,同时保持代码简短(例如分析)。请注意,像Google Analytics这样的系统现在更喜欢异步方法——通过
    document.createElement
    API创建
    脚本
    元素,设置其属性并将其附加到DOM——而不是使用传统的
    document.write
    方法

tl;医生:
DW很容易被误用,因此在现实世界中,只要可行,就选择适当的DOM操作方法。

什么时候是
文档。编写
好吗?
有许多地方鼓励程序员避免使用
document.write
(即使是最新版本也会给它一记沉重的耳光),这是一件好事,因为它是web脚本编写之初引入的一种相当笨拙的东西,从未被标准化,甚至没有被指定,并且已经被其他方法取代

然而,至少有一种情况可能会被认为是有帮助的

不支持脚本的用户代理

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

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

document.write
是实现脚本加载程序的一种非常简单的方法。当然,还有更复杂的脚本加载器来做同样的事情,但是好的老
文档。write
非常基本,在任何地方都可以工作,并且,为了这个目的,它与innerHTML一样轻松地完成这项工作

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

如果使用innerHTML插入不起作用 这与上面的几乎相同,但有点不同

使用innerHTML插入的脚本元素不会被执行,因此如果文档流是打开的,那么使用
document.write
而不是innerHTML是非常简单的。不过,通常的警告适用于使用
文档。加载文档后写入
将首先删除当前文档,这并不总是(错误,几乎永远)理想的

弹出窗口 好吧,每个人都不喜欢弹出窗口并将它们与
文档结合起来。write
似乎是最糟糕的。但有时,一个简单的弹出窗口,包含由
文档编写的内容。write
比更复杂的对话更简单、更快(开发和呈现)

XHTML借口
document.write
在非HTML文档(例如XML)中不起作用。但是,尽管web上的许多页面都有XHTML DOCTYPE(可能是因为cms更喜欢XML而不是HTML),但这些页面几乎总是作为text/HTML使用,因此浏览器就是这样处理它们的。web在短期内不太可能转向XML(即实际上作为XML使用的文档)。对于网页来说,DOCTYPE本质上是一个标志,浏览器使用它来确定它是否应该处于标准模式,因此XML有点像是一个垃圾


然而,归根结底,
document.write
几乎不应该在“现实世界”中使用,因为DOM方法提供了一种标准化的替代方法,具有良好的指定行为,并且几乎得到了普遍支持<代码>文档。write
或多或少等同于
评估
,因为在一些罕见的情况下它是有用的,但几乎总是有更好的方法来做事情。

在W3C HTML5规范[W3C建议2014年10月28日第6.3.3节]文档中。write()仍然存在,虽然规范中有一个相当明确的警告,但以“对于所有这些r