一、BOM
1.window对象:BOM的核心是window。在浏览器中,window对象有双重角色,它既是通过Javascript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。表示在网页中定义的任何一个变量、对象和函数,都以window作为其Global对象。
1.1 全局作用域:由于windows对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。
定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。通过var 添加的window属性有一个名为[[Configurable]]属性,这个属性的值为false,所以不可以通过delete操作符删除。
尝试访问未声明的变量会抛出异常,但是通过查询window对象,可以知道某个可能未声明的变量是否存在。
1.2 窗口关系及框架:如果页面中包含框架,则每个框架都有自己的window对象,并保存在frames集合中。在frames集合中,可通过索引和框架名称来访问相应的window对象。
top对象始终指向最高最外层框架,也就是浏览器窗口。使用它可以确保在一个框架中正确的访问另一个框架。与top对象相对的另一个window对象是parent。parent对象始终指向当前框架的直接上层框架,在某些情况下,parent有可能等于top;但是没有框架的情况下,parent一定等于top(此时它们都等于window)。
self对象,它始终指向window;self和window对象可以互换使用。引入self对象的目的是为了与top和window对象对应起来,因此它不格外包含其它值。
1.3 窗口位置:screenLeft和screenTop、screenX和screenY、window.moveTo()和window.moveBy()。
1.4 窗口大小:innerWidth、innerHeight、outerWidth、outerHeight
(标准模式)document.documentElement.clientWidth、document.documentElement.clientHeight
(混杂模式)document.body.clientWidth、document.body.Height
window.resizeTo、window.resizeBy()
1.5 导航和打开窗口(window.open())
弹出窗口:window.open():4个参数:要加载的url、窗口目标、一个特性字符串、表示新页面是否取代浏览器历史记录中当前页面的布尔值。window.open()方法会返回一个指向新窗口的引用,通过这个引用可以操作窗口(resizeTo()、moveTo()、close())。新创建的window对象有一个opener属性,其中保存着打开它的原始窗口对象。
1.6 间歇调用和超时调用
setTimeout()两个参数:要执行的代码和毫秒(执行代码前要等待的时间)。该方法返回一个ID,ID用于取消超时调用clearTimeout(ID)。
setInterval()两个参数:要执行的代码和执行间隔时间(毫秒)。返回ID,用于取消取消间歇调用clearInterval(ID);
1.7 系统对话框
浏览器通过alert()、confirm()、prompt()方法可以调用系统对话框向用户显示信息。
2.location对象
location是最有用的对象之一,它提供了与当前窗口中加载的文档相关的信息,还提供了一些导航功能。location对象是一个很特别的对象,它既是window对象的属性,又是documet对象的属性。location对象可以将URL解析为独立的片段,让开发人员通过不同的属性访问这些片段。
replace()方法打开一个新地址,不会在历史记录中生成新记录,用户不能返回到前一个页面。
reload()作用是重新加载当前页面(浏览器缓存中加载)。reload(true)重新从服务加载。
3.navigator对象(用于检测显示网页的浏览器类型)
4.screen对象
5.history对象
history.go()、history.back()、history.forword()
二、客户端检测
1.能力检测