【发布时间】:2011-01-13 21:22:17
【问题描述】:
这两者有什么区别?
【问题讨论】:
-
我对平台对象和浏览器对象之间的区别很感兴趣(例如选择列表 VS 下拉列表),但这也很有趣。 +1!
-
BOM 包括Window 和Navigator 对象,它们用于访问诸如back button 和plugin status 之类的信息,这些信息不依赖于当前加载的文档页面。
这两者有什么区别?
【问题讨论】:
浏览器对象模型是浏览器提供的所有内容的更大表示,包括当前文档、位置、历史记录、框架以及浏览器可能向 JavaScript 公开的任何其他功能。浏览器对象模型不规范,可以根据不同的浏览器进行更改。
文档对象模型是标准化的并且特定于当前的 HTML 文档。它由浏览器对象模型公开(即 DOM 是 BOM 的子集)。
【讨论】:
“浏览器对象模型”(BOM) 是 2000 年代初期的一个术语,它没有流行起来,并被替换为[1] “Web API”
Web APIs 是网页可用的 JavaScript APIs:浏览器提供给页面的任何对象/接口、它们的属性、方法和事件,除了对象,如 String,它们是一部分JavaScript language 本身。
The DOM (Document Object Model),在 Web 开发的上下文中,是 Web API 的一个子集,涉及对网页和其他“文档”的结构和内容的操作。
从历史上看,DOM 被设计为“a platform- and language-neutral interface”,DOM Level 1 specification 在附录中描述了 ECMAScript (JavaScript) 和 Java 绑定。您可能仍然使用 DOM API 来处理来自浏览器外部的 XML/HTML 数据(例如,在 Java 中使用 Xerces),但 DOM 规范的“生活标准”版本将重点放在 Web 用例上,并且大多数recent W3C implementation report 主要包括(如果不是唯一的话)网络浏览器。
[1] 请参阅 Google trends for "Browser object model",以及如何在现代书籍(JavaScript Cookbook:Web 编程)中使用 only briefly mentioned as 'BOM - see Web API'。
[2019 年重写的答案]
【讨论】:
我认为BOM=DOM +(-) non standard properties of the browser。所以每个浏览器都有自己的 BOM
【讨论】:
这是一个非正式术语,因为没有提及它的 W3C 或 WHATWG 标准。
一个简单的定义是 BOM 包含可通过浏览器中的脚本访问的整个对象结构,从“包含其他所有内容”的 window 对象开始,因为它是全局对象。
window 对象包含许多属性(试试console.dir( window );)。这些属性在许多网络标准中都有规定。 window 对象的“核心”规范现在仍然在 HTML 标准中指定 - see here,但我想编辑决定将此规范转换为单独的标准只是时间问题。我绝对支持“BOM”或“浏览器环境”标准,以使事情更合乎逻辑和更合适。
另一方面,这是一个正式的术语。您可以在各种标准中找到该术语的定义,例如 DOM4 标准规定:
DOM 是一个与语言和平台无关的接口,它允许 动态访问和更新内容的程序和脚本 文件的结构。
注意重点是如何放在文档上的。与 BOM(基本上是浏览器中所有 API 的总称)不同,DOM 只是那些处理文档的 API。
一个简单的定义是 DOM 被实现为 document 对象(顺便说一句,它是 DOM 树的根)。基本上,DOM 树(以及其中的所有内容)都可以被视为 DOM 的一部分。类似地,DOM 树之外的所有内容都不是 DOM 的一部分。
DOM 树之外 == window 的所有属性,document 对象除外
【讨论】:
BOM 是整个浏览器的更广泛视图,其中 DOM 仅限于文档窗口和相关方法。查看完整的文章 javascript-browser-object-model
【讨论】: