浏览器对象模型和文档对象模型有啥区别?

Posted

技术标签:

【中文标题】浏览器对象模型和文档对象模型有啥区别?【英文标题】:What's the difference between the Browser Object Model and the Document Object Model?浏览器对象模型和文档对象模型有什么区别? 【发布时间】:2011-01-13 21:22:17 【问题描述】:

两者有什么区别?

【问题讨论】:

我对平台对象和浏览器对象之间的区别很感兴趣(例如选择列表 VS 下拉列表),但这也很有趣。 +1! BOM 包括Window 和Navigator 对象,它们用于访问诸如back button 和plugin status 之类的信息,这些信息不依赖于当前加载的文档页面。 【参考方案1】:

浏览器对象模型是浏览器提供的所有内容的更大表示,包括当前文档、位置、历史记录、框架以及浏览器可能向 javascript 公开的任何其他功能。浏览器对象模型不规范,可以根据不同的浏览器进行更改。

文档对象模型是标准化的并且特定于当前的 html 文档。它由浏览器对象模型公开(即 DOM 是 BOM 的子集)。

【讨论】:

【参考方案2】:

物料清单

这是一个非正式术语,因为没有提及它的 W3C 或 WHATWG 标准。

一个简单的定义是 BOM 包含可通过浏览器中的脚本访问的整个对象结构,从“包含其他所有内容”的 window 对象开始,因为它是全局对象。

window 对象包含许多属性(试试console.dir( window );)。这些属性在许多网络标准中都有规定。 window 对象的“核心”规范现在仍然在 HTML 标准中指定 - see here,但我想编辑决定将此规范转换为单独的标准只是时间问题。我绝对支持“BOM”或“浏览器环境”标准,以使事情更合乎逻辑和更合适。

DOM

另一方面,这是一个正式的术语。您可以在各种标准中找到该术语的定义,例如 DOM4 标准规定:

DOM 是一个与语言和平台无关的接口,它允许 动态访问和更新内容的程序和脚本 文件的结构。

注意重点是如何放在文档上的。与 BOM(基本上是浏览器中所有 API 的总称)不同,DOM 只是那些处理文档的 API。

一个简单的定义是 DOM 被实现为 document 对象(顺便说一句,它是 DOM 树的根)。基本上,DOM 树(以及其中的所有内容)都可以被视为 DOM 的一部分。类似地,DOM 树之外的所有内容都不是 DOM 的一部分。

DOM 树之外 == window 的所有属性,document 对象除外

【讨论】:

HTML5 将大部分 BOM 编码为正式规范。所以,有一个标准(某种程度),所有主流浏览器都遵守。【参考方案3】:

“浏览器对象模型”(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 年重写的答案]

【讨论】:

另外,如果你在 Firebug 中打开“DOM”标签,你会看到 JavaScript 的全局对象,它属于 BOM,与 DOM 关系不大。【参考方案4】:

我认为BOM=DOM +(-) non standard properties of the browser。所以每个浏览器都有自己的 BOM

【讨论】:

【参考方案5】:

BOM 是整个浏览器的更广泛视图,其中 DOM 仅限于文档窗口和相关方法。查看完整的文章 javascript-browser-object-model

【讨论】:

以上是关于浏览器对象模型和文档对象模型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中的可变和不可变托管对象模型有啥区别?

JavaScript的BOM和DOM有啥区别

数据模型和对象模型有啥区别?

视图模型和数据传输对象有啥区别?

Python:按值调用和按对象调用有啥区别?

DOM和BOM区别