BOM提供了很多对象,用于访问浏览器功能。这些功能与任何网页内容无关。
window对象
全局作用域
由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量,函数都会变成window对象的属性和方法。
窗口关于及框架
每个框架都拥有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过索引(从0开始,从左到右,从上到下)或者相应的框架名称来访问window对象。
top对象始终指向最高层的框架,也就是浏览器窗口。
parent对象指向当前框架的直接上级框架。
窗口位置
跨浏览器获取窗口左边和上边的位置:
var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft :window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop:window.screenY;
窗口大小
虽然最终无法确定浏览器窗口本身的大小,但是却可以取得可视窗口的大小。
var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight;
if (typeof pageWidth != "number") {
if(document.compatMode == CSS1Compat) {
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
} else {
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
}
导航和打开窗口
使用window.open()方法既可以导航到一个特定的URL,也可以打开一个新的浏览器窗口。接受4个参数:要加载的URL,窗口目标,一个特性字符串以及一个表示新页面是否取代浏览器历史记录中的当前加载页面的布尔值。通常只需传入一个参数即可。
window.open("http://www.baidu.com","_blank")
间歇调用和超时调用
javaScript是单线程语言,但它通过设置超时值和间歇时间值来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,后者则是每隔指定的时间久执行一次代 码。
超时调度需要使用window对象的setTimeout()方法,接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前等待多少毫秒)。其中第一个参数可以是一个字符串,或者是一个函数。建议使用函数作为参数。
调用setTimeout()方法后,会返回一个数值的ID,表示超时调用。这个数值ID是计划执行代码的唯一标识,可以通过它来取消超时调用。
调用clearTimeout方法,把相应的超时调度ID作为参数传进去,就可以取消超时调用。如下所示:
//设置超时调用
var timeoutId = setTimeout(function(){
alert("hello world.");
}, 1000);
//取消调用
clearTimeout(timeoutId);