8. BOM
Last updated
Last updated
全局变量会成为 window
对象的属性,但是定全局变量与在 window
对象上直接定义属性的差别:全局变量不能通过 delete
操作符删除,而直接在 window 对象上的定义的属性可以。
窗口位置 下列代码可以跨浏览器取得窗口左边和上边的位置:
但不同浏览器的坐标起点不同,无法在跨浏览器的条件下取得窗口左边和上边的精确坐标值。
窗口大小 不同浏览器会有所不同。IE9+、Firefox、Safari、Opera 和 Chrome 提供以下4个属性:
使用 resizeTo()
和 resizeBy()
方法可以调整浏览器窗口的大小。这两个方法都接收两个参数,其中 resizeTo()
接收浏览器窗口的新宽度和新高度,而 resizeBy()
接收新窗口与原窗口的宽度和高度之差。有可能被浏览器禁用,同样不适用于框架,而只能对最外层的 window
对象使用。
导航和打开窗口
window.open
接收 4 个参数:要加载的 URL、窗口目标、一个特性字符串以及一个表 示新页面是否取代浏器历史记录中当前加载页面的布尔值。通常只须传递第一个参数,最后一个参数只在不打开新窗口的情况下使用。此外,第二个参数也可以是下列任何一个特殊的窗口名称: _self
、 _parent
、 _top
或 _blank
。第三个参数是一个逗号分隔的设置字符串,表示在新窗口中都显示哪些特性。下表列出了可以出现在这个字符串中的设置选项。
大多数浏览器都内置有弹出窗口屏蔽程序。浏览器内置的屏蔽程序阻止的弹出窗口,那
么 window.open()
很可能会返回 null
,浏览器扩展或其他程序阻止通常会抛出一个错误。
setTimeout()和setInterval() 异步方法,类似预约制排队取号。setTimeout
都是在全局作用域中执行的,因此函数中 this
的值在非严格模式下指向 window
对象,在严格模式下是 undefined
。
一般认为,使用 setTimeout()
来模拟 setInterval()
是一种最佳模式。在开发环境下,很少使用真正的 setInterval()
,原因是后一个 setInterval()
可能会在前一个 setInterval()
结束之前启动。而像前面示例中那样使用 setTimeout()
,则完全可以避免这一点。所以,最好不要使用 setInterval()
。
系统对话框 浏览器通过 alert()
、 confirm()
和 prompt()
方法可以调用系统对话框向用户显示消息。通过这几个方法打开的对话框都是同步和模态的。
位置操作
修改 location
对象的其他属性也可以改变当前加载的页面,每次修改 location
的属性( hash
除外),页面都会以新 URL 重新加载。
history
对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。
location
是最有用的BOM
对象之一,保存着当前文档的信息,将 URL
解析为独立的片段;既是 window
对象的属性,也是 document
对象的属性;换句话说,window.location
和 document.location
引用的是同一个对象。下表列出了它所有属性:
navigator
对象与其他 BOM
对象的情况一样,每个浏览器中的 navigator
对象也都有一套自己的属性。下表列出了存在于所有浏览器中的属性和方法,以及支持它们的浏览器版本。
screen
对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等。每个浏览器(PC/Mobile)中的 screen
对象都包含着各不相同的属性,下表列出了所有属性及支持相应属性的浏览器。