和我一起深入了解浏览器对象模型 BOM「一」

616 阅读2分钟

「这是我参与11月更文挑战的第 9 天,活动详情查看:2021最后一次更文挑战

BOM 主要提供了与 html 无关的浏览器对象模型。由于缺乏规范,因此各大主流浏览器中共通的部分存为了标准🙃了解其中的细节,让我们操纵浏览器会更加得心应手

window 对象

BOM 核心就是 window 对象,其表示为浏览器的实例。window 实例是一个全局的对象,因此很多浏览器 API 及相关构造函数,都会以 window 属性的方式暴露

全局作用域

在全局作用域中,任何使用 var 或者省略 var 声明的变量和方法,都会挂载到 window 实例上

image.png

image.png

如图,使用 let 关键字在全局作用域下声明的变量,并不会绑定为 window 的属性

在这里聊一个细节:

严格控制我们变量的作用域,原则上是最小作用域;尽量使用 let 来定义块作用域;这样会避免不少的坑

窗口

top 对象始终指向最上层的窗口,即浏览器窗口本身

parent 对象始终指向当前窗口的父窗口

self 对象始终指向 window,即为同一个对象,这么做是为了和 top, parent 保持一致


使用 window.open(url, titleName) 打开新窗口,新窗口中 top.name 的值是 open() 中指定的值(不指定则为空字符)

image.png

窗口位置

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

image.png

其中,innerXX 指浏览器中页面的可视大小,outerXX 指浏览器的外部大小,这里会涵盖标签页,书签栏,地址栏等诸多空间

resizeTo(x, y)

指将当前的窗口缩放到具体的 x, y 大小

resizeBy(x, y)

相对于当前窗口的大小,分别缩放 x, y 个像素

moveXX, resizeXX 可能会被一些浏览器默认禁用!!