「这是我参与11月更文挑战的第 9 天,活动详情查看:2021最后一次更文挑战」
BOM 主要提供了与 html 无关的浏览器对象模型。由于缺乏规范,因此各大主流浏览器中共通的部分存为了标准🙃了解其中的细节,让我们操纵浏览器会更加得心应手
window 对象
BOM 核心就是 window 对象,其表示为浏览器的实例。window 实例是一个全局的对象,因此很多浏览器 API 及相关构造函数,都会以 window 属性的方式暴露
全局作用域
在全局作用域中,任何使用 var 或者省略 var 声明的变量和方法,都会挂载到 window 实例上
如图,使用 let 关键字在全局作用域下声明的变量,并不会绑定为 window 的属性
在这里聊一个细节:
严格控制我们变量的作用域,原则上是最小作用域;尽量使用 let 来定义块作用域;这样会避免不少的坑
窗口
top 对象始终指向最上层的窗口,即浏览器窗口本身
parent 对象始终指向当前窗口的父窗口
self 对象始终指向 window,即为同一个对象,这么做是为了和 top, parent 保持一致
使用 window.open(url, titleName) 打开新窗口,新窗口中 top.name 的值是 open() 中指定的值(不指定则为空字符)
窗口位置
moveTo(x, y)
以左上角为坐标原点,传入 x, y 表示向右下移动多少个像素
例如, moveTo(0, 0) 表示直接将窗口移动到左上角的
moveBy(x, y)
同样是右下为xy 的坐标系,表示参照当前的坐标,往右下移动 x, y 个像素
例如, moveBy(100, 200) 表示将窗口往右移动 100px,往下移动 200px
窗口大小
window 附带有 4 个属性:innerHeight,innerWidth,outerHeight,outerWidth
其中,innerXX 指浏览器中页面的可视大小,outerXX 指浏览器的外部大小,这里会涵盖标签页,书签栏,地址栏等诸多空间
resizeTo(x, y)
指将当前的窗口缩放到具体的 x, y 大小
resizeBy(x, y)
相对于当前窗口的大小,分别缩放 x, y 个像素
moveXX, resizeXX 可能会被一些浏览器默认禁用!!