JavaScript中的浏览器对象模型

浏览器对象模型

1.浏览器引入JavaScript

1.直接在HTML文件中引入

首先第1种方式就是直接在HTML文档里面引入JavaScript代码。在维护一些老项目的时候,经常 可以看到J avaScript代码是写在<title>标签下面的,并且通过一对<script>标签来引入代 码

但是,如果是直接在HTML文件中引入JavaScript代码,我们一般不写在vtitle>标签下面,更 加优化的一种方式是将<sc ript>标签写在<body>标签的最小面,这样可以更快的加载出页面 效果。

2.调用外部JS文件

第2种方式是使用外部链接的方式来调用外部的JS文件。这种方式适用于当我们的JavaScript代 码是单独的一个js文件时,就可以采用这种方式来引入JavaScript代码。

3使用a标记的href属性

我们还可以在<a>标签的href属性里面书写JavaScript代码,这样会改变<a>标签默认的超链 接特性,而变为执行这段JavaScript代码,

4事件里面直接书写JS代码

直接将JavaScript代码写在事件里面,例如我们书写一个点击 事件,当点击button按钮时,会执行相应的J avaScript代码

2. BOM基本介绍

1什么是BOM

所谓BOM,英语全称为Browser Object Model,翻译成中文为浏览器对象模型。我们的浏览 器,可以被看做是由各种各样的对象所组成

在BOM中大致存在如下几个对象:

•window:表示窗口对象

•navigator:包含浏览器相关信息

•location:包含当前页面的位置信息

•history :包含用户访问页面的历史信息

•screen:包含客户端显示能力信息

•document:表示整个页面

整个BOM的核心对象就是是window对象,它代表的是浏览器的一个实例。window对象同时也是 最顶层的对象。

2 BOM与DOM的关系

在下一章,我们还会介绍一个东西,被称之为DOM。很多初学者刚开始都搞不清楚BOM和DOM 之间的关系,事实上很简单,DOM可以算是BOM的一个分支。因为BOM里面存在一个叫做 Documen啲对象,但是这个对象的属性和方法太多了,所以W3C将其单独取了出来,做成了一 套规范,这个就是DOM,英语全称document object model,翻译成中文就是文档对象模型。

需要说明一下的是BOM目前还没有相应的规范。浏览器提供商会按照各自的想法去随意扩展 它,于是浏览器之间共有的对象就成了事实上的标准。这些对象在浏览器中得以存在,很大程度 上是由于它们提供了与浏览器的互操作性。目前,W3C已经将BOM的主要方面纳入了HTML5的 规范中。

3 .window 对象

1 window对象基本介绍

浏览器每打开一个窗口,就包含了一个window对象。window对 象是整个BOM的核心对象,它代表着一个浏览器窗口的实例。

window对象扮演着在ES中的globa I对象的角色,因此所有在全局作用域中声明的变量以及函数 都会成为该对象的属性和方法。也就是说全局变量是window对象的属性,全局函数是window对 象的方法。

通过访问window.a和window.test()也可以打印出a变量的值和调

用test()函数。

全局属性和window属性的区别

var和window对象的属性真的就是一模一样么?

也不是,还是有稍微不同的地方,那就是不能使用delete操作符删除用var声明的变量,但是如 果是window的属性就可以使用delete操作符来进行删除。

let以及const所声明的变量

还需要注意的是,使用ES6新提供的let和const所声明的变量不会成为window对象的属性

2常见属性

1.窗口大小

关于窗口大小的属性有两组,innerWidth , innerHeight 以及 outerWidth , outerHeight 区别在于:inner那一组表示的是页面视图区的大小,而outer那一组表示的是浏览器窗口本身的 尺寸

但是,不同的浏览器,所表示的值略微有差异。

我们除了通过inne rWidth , inne rHeight来获取页面视图区的大小以外,还可以通 过 document.documentElement.clientWidth 以

及document.documentElement.clientHeight来获取页面视图区的大小,

innerWidth 返回窗口的文档显示区的宽度(IE不支持

innerHeight 返回窗口的文档显示区的高度(IE不支持)

document.documentElement.clientWidth 返回窗口的文档显示区的宽度(通用方法)

document.documentElement.clientHeight 返回窗口的文档显示区的宽度(通用方法)

2.窗口位置

2.窗口位置的属性也是有两组,分别是scr eenLeft和scr eenTop,还有scr eenX和scr eenY

这两组属性都是表示窗口相对于屏幕左边和上边的位置

区别在于screenX和screen Y属性最早是火狐浏览器里面特有的属性。但是上面的代码是在谷歌浏 览器里面运行的,可以看到,现在这两组属性在很多浏览器里面都是通用的了。接下来我将上面 两组属性的区别总结成下面的表格

screenX 返回浏览器相对于屏幕窗口的x坐标(IE不支持)

screenY 返回浏览器相对于屏幕窗口的y坐标,即距离浏览器最顶端(IE不支持)

screenLeft 返回浏览器相对于屏幕窗口的x坐标

screenTop 返回浏览器相对于屏幕窗口的y坐标(在IE中这个坐标包括了工具栏+菜单栏+地址栏的高度)

3.元素位置

通 过offsetLeft以及offsetTop来得到一个元素在页面中的位置,位置的信息是不带单位的

4.元素大小

通过offsetwidth和offsetHeight来得到

—个元素的宽高

5.滚动位置

通过pageXOffset和pageYOffset属性我们可以获取文档在窗口左上角水平和垂直方向滚动的像素。

需要注意的是,pageXOffset和pageYOffset属性相等于scrollX和scrollY属性。这些属 性都是只读属性。

3常用方法

1.系统提示框

alert():用于显示带有一条指定消息和一个确定按钮的警告框。

2.窗口大小调整(有问题)

resizeTo()和resizeBy() r esizeTo():将浏览器窗口调整到指定的值

r esizeBy():相对于原来的浏览器窗口来进行调节

3.窗口位置移动(不使用,不学习)

window对象里面提供了 moveTo()和moveBy()

4.打开和关闭窗口

open()方法:使用window.open()方法,该方法有4个参数

浏览器一般都是会阻止弹窗的。一般需要我们点击允许弹出后,才弹出2.htm I页 面

在调用了 window对象的open()方法以后,他会返回一个对象,可以调用这些对象的方法,其 中就有一个close()方法,

还有一个opener属性,保存着打开它的原始窗口对象

5.定时函数

间歇调用

setInterval()与clearInterval():这两个方法可以说是一组方法,前面是设定指定的时间 周期调用某个函数,而后面的方法则是清除前面的设定

setInterval()语法如下:

setinterval(函数名,间隔时间)

其中间隔时间以毫秒来计算,1000毫秒为1秒。该方法会返回一个id值,这个id值可以用于停止 重复调用。

clearInterval()语法如下:

clearinterval(id)

作用是清除设置的间歇调用

超时调用

setTimeout()和clearTimeout():这两个也可以算是一组方法,前面是设定指定的时间周期 后调用某个函数,而后面的方法是清除前面的设定。

setTimeout()语法如下:

setinterval(函数名,间隔时间)

其中间隔时间也是指代的毫秒数,但是这个毫秒数的含义是执行代码前需要等待的毫秒数。该方

法也会返回一个 id,可用于clearTimeout

clearTimeout()语法如下:

clearinterval(id)

作用是清除设置的超时调用

4. navigator 对象

1 navigator 对象介绍

navigator对象包含浏览器和运行浏览器的操作系统的大量信息。例如操作系统版本,浏览器类型 和版本等信息。很多时候我们需要在判断网页所处的浏览器和平台,navigator对象为我们提供了 便利。

2 navigator 对象属性

appCodeName 返回浏览器的代码名

appMinorVersion 返回浏览器的次级版本

appName 返回浏览器名称

appVersion 返回浏览器的平台和版本信息

browserLanguage 返回当前浏览器的语言

cookieEnabled 返回指明浏览器中是否启动cookie的布尔值

cpuClass 返回浏览器系统的CPU等级

onLine 返回指明系统是否处于脱机模式的布尔值

platform 返回运行浏览器的操作系统平台

systemLanguage 返回OS使用的默认的语言

userAgent 返回由客户机发送服务器的user-agent头部的值

userLanguage 返回OS的自然语言设置

5. location 对象

location对象提供了当前窗口中加载的文档的有关信息。这个对象有点特别,它既是window对象 的属性,也是document对象的属性,也就是说window.location和document.location调用 的是同一个对象

1常见属性

hash 返回一个URL的锚部分

host 返回一个URL的主机名和端口

hostname 返回URL的主机名

href 返回完整的URL

pathname 返回的URL路径名

port 返回一个URL服务器使用的端口号

protocol 返回一个URL协议

search 返回一个URL的查询部分

2常见方法

assign() 载入一个新的文档

reload() 重新载入当前文档

replace() 用新的文档替换当前文档

reload():该方法用于重新加载当前文档

assign():该方法加载新的文档。

replaced :该方法可用一个新文档取代当前文档

那么这两个方法的区别是什么呢?

assign()方法:加载URL指定的新的HTML文档。就相当于一个链接,跳转到指定的URL, 当前页面会转为新页面内容,可以点击后退返回上一个页面。

replaced方法:通过加载URL指定的文档来替换当前文档,这个方法是替换当前窗口页面, 前后两个页面共用一个窗口,所以是没有后退返回上一页的。

跳转的方式

最后我们来总结一下页面跳转的方式,抛开<a>标签,通过JavaScript代码来实现页面的跳转大 致有下面几种方式:

•location.href

•window.location

•location

•location.assign()

•location.replace()

6. history 对象

history对象用来管理当前窗口最近访问过的URL记录,这些URL记录被保存在history列表中, history对象使得脚本程序可以模拟浏览器工具栏的前进和后退按钮。

1.常见属性

length 返回浏览器历史列表中URL的数量

2.常见方法

history对象常见的方法如下表:

方法 描述

back。 加载history列表中的前一个URL

forward。 加载history列表中的下一^ URL

go。 加载history列表中的某个具体页面

window.history.go。方法可以用来导航到指定的页面,0代表是当前页面

还有window.history.forward()和window.history.back()方法可以分别用来向前或者回退 —个页面,就像浏览器的前进和后退按钮一样。

7 screen 对象

有时脚本需要获取浏览器或者显示器的一些信息,例如分辨率,有效分辨率,DPI等。这个时候 我们就可以使用scree n对象。该对象提供了一组属性,供我们来获取到这些有用的信息。

screen对象属性如下表:

属性 说明

height 屏幕的像素高度

width 屏幕的像素宽度

availHeight 屏幕的像素高度减去系统部件高度之后的值(只读)

availWidth 屏幕的像素宽度减去系统部件宽度之后的值(只读)

left 当前屏幕距左边的像素距离[firefox返回0, chrome和IE不支持]

top 当前屏幕距上方的像素距离[firefox返回0, chrome和IE不支持]

availLeft 未被系统部件占用的最左侧的像素值(只读)[chrome和firefox返回0, I E不支持]

availTop 未被系统部件占用的最上方的像素值(只读)[chrome和firefox返回0, I E不支持]

bufferDepth 读、写用于呈现屏外位图的位数[IE返回0, chrome和firefox不支持]

colorDepth 用于表现颜色的位数(只读)[IE8-返回32,其他浏览器返回24]

pixelDepth 屏幕的位深(只读)[IE8 -不支持,其他浏览器返回24]

deviceXDPI 屏幕实际的水平DPI(只读)[IE返回96, chrome和firefox不支持]

deviceYDPI 屏幕实际的垂直DPI(只读)[IE返回96, chrome和firefox不支持]

logicalXDPI 屏幕逻辑的水平DPI(只读)[IE返回96, chrome和firefox不支持]

logicalYDPI 屏幕逻辑的垂直DPI(只读)[IE返回96, chrome和firefox不支持]

updateInterval 读、写以毫秒表示的屏幕刷新时间间隔[IE返回0, chrome和firefox不 支持]

fontSmoothingEnab 是否启用了字体平滑(只读)[IE返回true, chrome和firefox不支持]

led

8 document 对象

在后面的DOM中,我们会专门介绍document相关的大量的方法。这里就先介绍一个即可。write()方法,用于将一串文本写入页面。如果页面已经加载了,它将完全替换当前的文 档。

使用document.write()书写页面的时候,原来的东西会完全被替换掉。并且我们书 写了两行东西,这里两行东西是在一行里面显示的。与document.wri te()对应的有一

个document.writeln(),这个方法就可以实现换行输出,但是这里的换行指的是代码里面会换 行,页面上仍然是显示成一行的。不过多了一个空格,因为html存在空白折叠现象。书写的新的 内容仍然会将之前的内容给替换掉。

cookie

1.创建 cookie

要创建一个cookie,只需要将要保存的信息赋值给document.cookie属性即可

2.修改 cookie

如果要修改cookie的值也非常简单,只需要对已有的键重新赋值就可以了。

3.读取 cookie

读取cookie只需要键入document.cookie即可,这个前面已经用过了。我们可以使用split。方法将 cookie的字符串拆分成数组,然后使用for-of进行循环遍历

4. cookie失效时间

cookie默认是会话的cookie,也就是说,一旦浏览器会话完成(也就是用户关闭浏览器标签页或者 窗口时),cookie就会被删除。

不过,cookie可以变成持久的,只需在设置cookie的时候,在cookie末尾添加';expires=日期 值'来设置失效日期即可

5. cookie的路径和域

默认情况下,cookie只能通过与设置它的文件在相同的目录和域中的页面来读取。这是出于安全 的原因,所以访问cookie是有限制的。

路径可以进行修改。例如我们要让根目录中的任何页面都可以读取cookie。可以通过在设置 cookie时,在cookie的末尾添加;path=/来实现,

除此之外,我们还可以在cookie的末尾添加;domain = domainName来设置域:

6.保护cookie安全

这个也非常简单,在一个cookie的末尾添加上字符串';secure '即可,这样可以确保它只能通过安 全的H TTPS网络来进行传输

7.删除 cookie

要删除一个cookie的方法非常简单,只需要将cookie的失效时间设置在过去的某个时间过期即可。