JavaScript第八章——BOM
一、window 对象
是BOM的核心,并且表示浏览器的一个实例
在网页中定义的任何一个对象、变量和函数,都以 window 作为其 Global 对象,因此有权访问 parseInt()等方法
全局作用域
全局变量不能通过 delete 操作符删除
在 window 对象上的定义的属性可以被删除
注意:尝试访问未声明的变量会抛出错误,但是通过查询 window 对象,可以知 道某个可能未声明的变量是否存在
在全局作用域中声明的 所有变量和函数,照样会变成 window 对象的成员
窗口关系及框架
每个框架都拥有自己的window 对象,并且保存在frames 集合中
在frames 集合中,可以通过数值索引(从 0开始,从左至右,从上到下)或者框架名称来访问相应的 window 对象
在使用框架的情况下,浏览器中会存在多个 Global 对象
在每个框架中定义的 全局变量会自动成为框架中 window 对象的属性,都包含原生类型的构造函数,并且是互不相同的
窗口位置
IE、Safari、Opera 和 Chrome 都提供了 screenLeft 和 screenTop 属性,分别用于表示窗口相对于屏幕左边和上边的位置
Firefox 则在 screenX 和 screenY 属性中提供相同的窗口位置信息,Safari和 Chrome也同时支持这两个属性
Opera 虽然也支持 screenX 和 screenY 属性,但与 screenLeft 和 screenTop 属性并不对应
使用 moveTo() 和 moveBy()方法倒是有可能将窗口精确地移动到一个新位置
moveTo()接收的是新位置的 x和 y坐标值
moveBy()接收的是在水平和垂直方向上移动的像素数
窗口大小
IE9+、Firefox、Safari、Opera 和 Chrome 均为此提 供了 4个属性:innerWidth、innerHeight、outerWidth 和 outerHeight
在 IE、Firefox、Safari、Opera 和 Chrome 中,document.documentElement.clientWidth 和 document.documentElement.clientHeight 中保存了页面视口的信息
对于移动设备,window.innerWidth 和 window.innerHeight 保存着可见视口,也就是屏幕上可 见页面区域的大小
在其他移动浏览器中,document.documentElement 度量的是布局视口,即渲染后页面的实际大小
使用 resizeTo()和 resizeBy()方法可以调整浏览器窗口的大小
resizeTo()接收浏览器窗口的新宽度和新高度
resizeBy()接收新窗口与原窗口的宽 度和高度之差
导航和打开窗口
使用 window.open()方法既可以导航到一个特定的 URL,也可以打开一个新的浏览器窗口
接收 4个参数:要加载的 URL、窗口目标、一个特性字符串以及一个表示新页面是否取代浏览 器历史记录中当前加载页面的布尔值
如果给 window.open()传递的第二个参数并不是一个已经存在的窗口或框架,那么该方法就会根据在第三个参数位置上传入的字符串创建一个新窗口或新标签页
如果没有传入第三个参数,那么就会打开一个带有全部默认设置(工具栏、地址栏和状态栏等)的新浏览器窗口(或者打开一个新标签页— —根据浏览器设置)
window.open()方法会返回一个指向新窗口的引用
调用 close()方法可以关闭新打开的窗口
在打开计算机硬盘中的网页时,IE会解除对弹出窗口的某些限制。但是在服务器 上执行这些代码会受到对弹出窗口的限制
如果是浏览器内置的屏蔽程序阻止的弹出窗口,那么window.open()很可能会返回 null。此时,只要检测这个返回的值就可以确定弹出窗口是否被屏蔽 了
如果是浏览器扩展或其他程序阻止的弹出窗口,那么window.open()通常会抛出一个错误。
准确地检测出弹出窗口是否被屏蔽,必须在检测返回值的同时,将对window.open()的调用封装 在一个 try-catch块中
间歇调用和超时调用
超时调用需要使用 window 对象的 setTimeout()方法
接受两个参数:要执行的代码和以毫秒 表示的时间(即在执行代码前需要等待多少毫秒)
第一个参数可以是一个包含 JavaScript代码的 字符串(就和在 eval()函数中使用的字符串一样),也可以是一个函数
调用 setTimeout()之后,该方法会返回一个数值 ID,表示超时调用:这个超时调用 ID是计划执 行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用 clearTimeout()方法并将相应的超时调用 ID作为参数传递给它
只要是在指定的时间尚未过去之前调用 clearTimeout(),就可以完全取消超时调用
超时调用的代码都是在全局作用域中执行的,因此函数中 this 的值在非严格模 式下指向 window 对象,在严格模式下是 undefined
设置间歇调用的方法是 setInterval()
与超时调用类似,只不过它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或 者页面被卸载
接受的参数与 setTimeout()相同:要执行的代码(字符串或函数)和每次执行之前需要等待的毫秒数
同样返回一个间歇调用 ID,该 ID可用于在将来某个时刻取消间歇调用
可以使用 clearInterval()方法并传入相应的间歇调用 ID
间歇调用将会一直执行到页面卸载,因此要取消间歇调用(重要)
系统对话框
浏览器通过 alert()、confirm()和 prompt()方法可以调用系统对话框向用户显示消息
alert()方法,该方法接受一个字符串并将其显示给用户
显示一个系统对话框,其中包含指定的文本和一个 OK(“确定”)按钮
第二种对话框是调用 confirm()方法生成
二者的主要区别在于“确认”对话框除了显示 OK按钮外,还会显示 一个 Cancel(“取消”)按钮,两个按钮可以让用户决定是否执行给定的操作
二、location 对象
提供了与当前窗口中加载的文档有关的信息,还提供了一 些导航功能
它既是 window 对象的属性,也是 document 对象的属性;换句话说,window.location 和 document.location 引用的是同一个对象

查询字符串参数
解析查询字符串,然后返 回包含所有参数的一个对象


位置操作
使用 location 对象可以通过很多方式来改变浏览器的位置
最常用:使用 assign()方法并为其传递一个 URL
修改location对象的其他属性也可以改变当前加载的页面
在 IE8、Firefox 1、Safari 2+、Opera 9+和 Chrome中,修改 hash 的值会在浏览 器的历史记录中生成一条新记录
通过上述任何一种方式修改 URL 之后,浏览器的历史记录中就会生成一条新记录,因此用户通 过单击“后退”按钮都会导航到前一个页面。要禁用这种行为,可以使用 replace()方法
reload()方法:作用是重新加载当前显示的页面
三、navigator 对象



检测插件
检测浏览器中是否安装了特定的插件是一种常见的检测例程
使用 plugins 数组
plugins 集合有一个名叫 refresh()的方法,用于刷新 plugins 以反映最新安 装的插件。这个方法接收一个参数:表示是否应该重新加载页面的一个布尔值。如果 将这个值设置为 true,则会重新加载包含插件的所有页面;否则,只更新 plugins 集合,不重新加载页面。
每个插件对象本身也是一个 MimeType 对象的数组,这些对象可以通过方括号语 法来访问。每个 MimeType 对象有 4个属性:包含 MIME类型描述的 description、 回指插件对象的 enabledPlugin、表示与 MIME 类型对应的文件扩展名的字符串 suffixes(以逗号分隔)和表示完整 MIME类型字符串的 type
注册处理程序
Firefox 2为navigator 对象新增了 registerContentHandler()和registerProtocolHandler()方 法
这两个方法可以让一个站点指明 它可以处理特定类型的信息
registerContentHandler()方法接收三个参数:要处理的 MIME类型、可以处理该 MIME 类型的页面的 URL以及应用程序的名称
Firefox 4 及之前版本只允许在 registerContentHandler()方法中使用三个 MIME类型:application/rss+xml、application/atom+xml 和 application/ vnd.mozilla.maybe. feed。这三个 MIME类型的作用都一样,即为 RSS或ATOM 新闻源(feed)注册处理程序
registerProtocolHandler()方法
接收三个参数:要处理的协 议(例如,mailto 或 ftp)、处理该协议的页面的 URL和应用程序的名称
四、screen 对象
screen 对象基本上只 用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等


五、history 对象
history 对象保存着用户上网的历史记录,从窗口被打开的那一刻算起
每个浏览器窗口、每个标签页乃至每个框架,都有自己的 history 对象与特定的 window 对象关联
使用 go()方法可以在用户的历史记录中任意跳转,可以向后也可以向前
接受一个参数, 表示向后或向前跳转的页面数的一个整数值
负数表示向后跳转, 正数表示向前跳转
给 go()方法传递一个字符串参数,此时浏览器会跳转到历史记录中包含该字符串的第一个 位置


