浏览器模型

1. 浏览器对象 BOM

BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的 Window 对象是BOM的顶层对象,其他对象都是该对象的子对象(如 Screen、Location、History、Navigator 等)。

1.1 Window 对象

浏览器里面,window对象(注意,w为小写)指当前的浏览器窗口。它也是当前页面的顶层对象,即最高一层的对象,所有其他对象都是它的下属。一个变量如果未声明,那么默认就是顶层对象的属性。具体详见《网道 - Window 对象》

1.2 Location 对象

Location 对象提供 URL 相关的信息和操作方法。通过 window.locationdocument.location 属性得到对象。

1.3 History 对象

window.history 指向 History 对象,表示当前窗口的浏览历史。

每当同一个文档的浏览历史(即history对象)出现变化时,就会触发popstate事件。注意,仅仅调用pushState()方法或replaceState()方法 ,并不会触发该事件,只有用户点击浏览器倒退按钮和前进按钮,或者使用 JavaScript 调用History.back()History.forward()History.go()方法时才会触发。另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。

1.4 Screen 对象

Screen 对象表示当前窗口所在的屏幕,提供显示设备的信息。window.screen属性指向这个对象。具体详见《网道 - Screen 对象》

1.5 Navigator 对象

window.navigator属性指向一个包含浏览器和系统信息的 Navigator 对象。脚本通过这个属性了解用户的环境信息。具体详见《网道 - Navigator 对象》

2. Document 对象

Document Object Model(DOM),文档对象模型,其由节点组成的。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。

DOM 节点分类:

  • 文档节点(文档):整个 HTML 文档

  • 元素节点(标签):HTML标签

  • 属性节点(属性):元素的属性

  • 文本节点(文本):HTML标签中的文本内容(包括空格/换行)

DOM 节点获取:

  • 获取直接节点

    • document.getElementById()

    • document.getElementsByClassName()

    • document.getElementsByTagName()

    • document.querySelector()

    • document.querySelectorAll()

  • 获取关系节点

    • 父节点:节点.parentNode

    • 下一个兄弟节点:节点.nextElementSibling || 节点.nextSibling

    • 前一个兄弟节点:节点.previousElementSibling || 节点.previousSibling

    • 任意兄弟节点:节点.parentNode.children[index]

    • 第一个子节点:节点.firstElementChild || 节点.firstChild

    • 最后一个子节点:节点.lastElementChild || 节点.lastChild

    • 所有子节点:节点.children

DOM 节点操作:

  • 创建节点:document.createElement("标签名")

  • 末尾插入节点:节点.appendChild(新的子节点)

  • 定位插入节点:节点.insertBefore(新的子节点, 作为参考的子节点)

  • 删除节点:节点.removeChild(子节点)

  • 克隆节点:要复制的节点.cloneNode()

DOM 节点属性操作:

  • 获取属性:节点.属性名节点.getAttribute("属性名称")

  • 设置属性:节点.属性名=XXX节点.setAttribute("属性名", "属性值")

  • 删除属性:节点.removeAttribute(属性名)

上述获取和设置属性都有两种方法,其区别在于:

  • 元素节点.属性方式绑定的属性值不会出现在标签上

  • get/setAttribut绑定的属性值会出现在标签上

3. URL 对象

url的合法对象分为:

  • URL 元字符:分号(;),逗号(,),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加号(+),美元符号($),井号(#

  • 语义字符:a-zA-Z0-9,连词号(-),下划线(_),点(.),感叹号(!),波浪线(~),星号(*),单引号('),圆括号(()

url编码和解码即合法与不合法之间的转换:

  • encodeURI()方法用于转码整个 URL,转码元字符语义字符之外的字符

  • encodeURIComponent()方法用于转码 URL 的组成部分,转码语义字符之外的所有字符

  • decodeURI()方法用于整个 URL 的解码

  • decodeURIComponent()方法用于URL 片段的解码

URL接口是一个构造函数,通过window.URL可以拿到构造函数。

实例属性:

4. URLSearchParams 对象

URLSearchParams 对象用来构造、解析和处理 URL 的查询字符串(即 URL 问号后面部分)。

5. XMLHttpRequest 对象

具体属性和方法详见 网道 - XMLHttpRequest 对象

AJAX 通信

  1. 创建XMLHttpRequest对象实例

  2. 发出 HTTP 请求

  3. 接收服务器传回的数据

  4. 更新网页数据

6. FormData 表单对象

表单提交以键值对的形式,键名是控件的name属性,键值是控件的value属性。

  • 表单以 GET 形式提交,所有键值对会以 URL 的查询字符串形式,提交到服务器,例如/handling-page?user_name=张三&user_passwd=123&submit_button=提交

  • 表单以 POST 形式提交,所有键值对会连接成一行,作为 HTTP 请求的数据体发送到服务器,例如user_name=张三&user_passwd=123&submit_button=提交

注意,实际提交的时候,只要键值不是 URL 的合法字符(比如汉字“张三”和“提交”),浏览器会自动对其进行编码。编发方式详见 URL 对象

FormData() 构造函数的参数是一个表单元素,如果参数为空,则默认为空表单。

表单实例方法(以上述表单为例):

表单验证及其他相关属性详见表单/FormData 对象

7. ArrayBuffer 对象

ArrayBuffer 对象表示一段二进制数据,用来模拟内存里面的数据。通过这个对象,JavaScript 可以读写二进制数据。这个对象可以看作内存数据的表达。具体详见 ArrayBuffer 对象教程

8. Blob 对象

Blob 对象表示一个二进制文件的数据内容,通常用来读写文件,比如一个图片文件的内容就可以通过 Blob 对象读写通常用来读写文件。它与 ArrayBuffer 的区别在于,它用于操作二进制文件,而 ArrayBuffer 用于操作内存。具体详见 Blob 对象教程

Blob 对象不能直接下载成文件,需要通过 URL.createObjectURL() 转化成一个临时 URL。这个 URL 以blob://开头,表明对应一个 Blob 对象,协议头后面是一个识别符,用来唯一对应内存里面的 Blob 对象。

9. File 对象

File 对象代表一个文件,用来读写文件信息,可以说是一种特殊的 Blob 对象。

实例属性:

  • File.lastModified:最后修改时间

  • File.name:文件名或文件路径

  • File.size:文件大小(单位字节)

  • File.type:文件的 MIME 类型

实例方法:

  • 继承自 Blob 对象的方法

FileList 对象是一个类似数组的对象,代表一组选中的文件,每个成员都是一个 File 实例。FileList 对象主要出现的两个场合:

  • 文件控件节点的 files 属性,返回一个 FileList 实例。

  • 拖拉一组文件时,目标区的 DataTransfer.files 属性,返回一个 FileList 实例。

FileList 的实例是一个类似数组的对象,可以直接用[]运算符,即 myFileList[0] 表示第一个 File 对象。

10. FileReader 对象

FileReader 对象用于读取 File 对象或 Blob 对象所包含的文件内容。

实例属性:

  • FileReader.error:读取文件时产生的错误对象

  • FileReader.readyState:整数,表示读取文件时的当前状态。一共有三种可能的状态,0表示尚未加载任何数据,1表示数据正在加载,2表示加载完成。

  • FileReader.result:读取完成后的文件内容,有可能是字符串,也可能是一个 ArrayBuffer 实例。

  • FileReader.onabort:abort事件(用户终止读取操作)的监听函数。

  • FileReader.onerror:error事件(读取错误)的监听函数。

  • FileReader.onload:load事件(读取操作完成)的监听函数,通常在这个函数里面使用result属性,拿到文件内容。

  • FileReader.onloadstart:loadstart事件(读取操作开始)的监听函数。

  • FileReader.onloadend:loadend事件(读取操作结束)的监听函数。

  • FileReader.onprogress:progress事件(读取操作进行中)的监听函数。

实例方法:

  • FileReader.abort():终止读取操作,readyState属性将变成2

  • FileReader.readAsArrayBuffer():以 ArrayBuffer 的格式读取文件,读取完成后result属性将返回一个 ArrayBuffer 实例。

  • FileReader.readAsBinaryString():读取完成后,result属性将返回原始的二进制字符串。

  • FileReader.readAsDataURL():读取完成后,result属性将返回一个 Data URL 格式(Base64 编码)的字符串,代表文件内容。对于图片文件,这个字符串可以用于<img>元素的src属性。注意,这个字符串不能直接进行 Base64 解码,必须把前缀data:*/*;base64,从字符串里删除以后,再进行解码。

  • FileReader.readAsText():读取完成后,result属性将返回文件内容的文本字符串。该方法的第一个参数是代表文件的 Blob 实例,第二个参数是可选的,表示文本编码,默认为 UTF-8。

上述 FileReader.readAsDataURL 和 FileReader.readAsArrayBuffer 最常用!!!

如果你对内容有任何疑问,欢迎提交 ❕issues✉️ email

最后更新于

这有帮助吗?