window
BOM 的核心是window,它表示浏览器的一个实例。
在浏览器中,window对象有双重角色,它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScript 规定的Global 对象
。
全局作用域
所有在全局作用域中声明的变量、函数都会变成window 对象的属性和方法。
<script>
var age=29;
function sayAge(){
age=30
alert(this.age);
}
alert(window.age); //29
sayAge(); //30
window.sayAge();//30
</script>
定义全局变量与window 对象上直接定义的属性存在差别:
全局变量不能通过delete 操作删除(使用var 语句添加的window属性又一个[[Configurable]]的特性,值为false),而直接window 对象上定义的属性可以。
<script>
var age=29;
window.color="red";
//IE<9,error,其他所有浏览器false
delete window.age;
//IE<9,error,其他所有浏览器false
delete window.color;
console.log(window.age); //29
console.log(window.color);//undefined
</script>
窗口关系及框架
如果页面中包含框架,则每个框架都拥有自己的window 对象,并且都保存在frames 集合中。
<frameset rows="160,*">
<frame src="limit.html" name="topFrame">
<frameset cols="50%,50%">
<frame src="range.htm" name="leftFrame">
<frame src="prop attr.html" name="rightFrame">
</frameset>
</frameset>
以上代码创建一个框架集,可以通过window.frames[0]或者window.frames[“topFrame”]来饮用上方框架。但最好使用top 而非window 来引用框架。(例如top.frames[0])。top 对象适中指向最高(最外)层框架,也就是浏览器窗口,使确保在一个框架中正确访问另一个框架。而window 对象对于一个框架中编写的任何代码来说,指向的都是那个框架特定实例。
窗口位置
IE、Safari、Opera、Chorme | screenLeft 和 screenRight |
Firefox | screenX、screenY |
//跨浏览器取得窗口左边和右上的位置
var left = (typeof window.screenLeft =="number")?window.screenLeft:window.screenX;
var right = (typeof window.screenRgiht == "number")? window.screenRgiht:window.screenY;
console.log(left);
console.log(right);
//由于不同浏览器的不同处理方式,得到值有偏差
//使用moveTo() he moveBy() 方法可以精确地移动到一个新位置
//注:这两个方法可能会被浏览器禁用;只能对最外层的window 对象使用
window.moveTo(0,0); // 将窗口移动到聘雇左上角
window.moveBy(0,100); //将窗口向下移动100 像素
</script>
location 对象
location 是最有用的BOM 对象之一,它提供了与当前窗口中加载文档有关的信息,还提供了一些导航功能。
location 对象是个特别对象,既是window 对象的属性,也是document 对象的属性。document.location 和window.location 引用的是同一对象。