据我所知,getElementsByName
是在 中定义的函数HTMLDocument
,并且HTMLDocument
继承自Document
,并且Document
继承自Node
.
那么为什么我可以Document.prototype.getElementsByName
在 Chrome 中看到但在 Firefox 中看不到?Chrome 没有实现 DOM2 规范吗?
据我所知,getElementsByName
是在 中定义的函数HTMLDocument
,并且HTMLDocument
继承自Document
,并且Document
继承自Node
.
那么为什么我可以Document.prototype.getElementsByName
在 Chrome 中看到但在 Firefox 中看不到?Chrome 没有实现 DOM2 规范吗?
Chrome 不实现 DOM2 规范吗?
是的,可能不会。我猜他们至少实现了DOM 3,如果不是更新的 版本:-)
但是,那些也没有定义getElementsByName
。那么他们是怎么得到这个的呢?它实际上是在 HTML5 ( WHATWG / W3 ) 的Document
部分界面上指定的:
DOM 规范定义了一个 Document 接口,这个 [HTML5] 规范显着扩展了 […]
在http://dev.w3.org/html5/spec-LC/dom.html#documents-in-the-dom我找到了注释
因为 HTMLDocument 接口现在是使用特定于绑定的转换方法获得的,而不是简单地作为文档对象的主要接口,所以它不再被定义为从 Document 继承。
因此,这些接口的规范细节仍在进行中,并且变化多端。请注意,浏览器甚至不应该导出任何类型的 WebIDL 可以。DocumentPrototype
- 规范只定义接口,而不是它们的确切 EcmaScript 绑定表示。
所以 Chrome 确实遵循较新的规范(但仍然有一些HTMLDocument
?),而 Firefox 实现的是旧版本。然而,真正重要的是这些方法确实存在于每个地方window.document
——而不是它们是如何到达那里的:-)