浏览器对象模型和文档对象模型有啥区别?
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
【讨论】:
以上是关于浏览器对象模型和文档对象模型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章