BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。而BOM的核心对象是window,它表示浏览器的一个实例。在浏览器中,window对象有双重角色,它既是通过JS访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其Global对象。
一、window对象
1.1 全局作用域
由于window对象同时扮演着ECMAScript中Global对象的角色,因此在所有的全局作用域中声明的变量、函数都会变成window对象的属性和方法。值得注意的是,全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。
【示例】
【示例】
<script type="text/javascript">
var age = 23;
function sayAge() {
return 23;
}
window.sex = '男';
alert(window.age);
alert(window.sayAge());
alert(window.sex);
delete window.age;
alert(window.age);
</script>
1.2 窗口关系及框架
如果页面中包含框架,则每个框架都拥有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引(从0开始,从左至右,从上上下)或者框架名称来访问相应的window对象。每个window对象都有一个name属性,其中包含框架的名称。
1.3 窗口位置
1.4 窗口大小
1.5 导航和打开窗口
方法:window.open()
参数:要加载的URL、窗口目标、一个特性字符串、一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值
注意:通常只需传递第一个参数,最后一个参数只在不打开新窗口的情况下使用;
如果该方法传递了第二个参数,而且该参数是已有窗口或框架的名称,那么就会在具有该名称的窗口或框架中加载第一个
方法:window.open()
参数:要加载的URL、窗口目标、一个特性字符串、一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值
注意:通常只需传递第一个参数,最后一个参数只在不打开新窗口的情况下使用;
如果该方法传递了第二个参数,而且该参数是已有窗口或框架的名称,那么就会在具有该名称的窗口或框架中加载第一个
参数指定的URL;
返回值:该方法返回一个指向新窗口的引用。引用的对象与其他window对象大致相似。
返回值:该方法返回一个指向新窗口的引用。引用的对象与其他window对象大致相似。
1.6 弹出窗口屏蔽程序
大多数浏览器都内置有弹出窗口屏蔽程序,结果就是用户可以将绝大多数不想看到弹出窗口屏蔽掉。于是,在弹出窗口被屏蔽时,就有两种情况要考虑:
第一种,如果是浏览器内置的屏蔽程序阻止的弹出窗口,那么window.open()方法很可能就会返回null。此时,只要检测这个返回的值就可以确定弹出窗口是否被屏蔽。
第二种,如果是浏览器扩展或其他程序阻止的弹出窗口,那么对window.open()通常或抛出一个错误。因此,要想准确地检测出弹出窗口是否被屏蔽,必须在检测返回值的同时,将对window.open()的调用封装在一个try-catch块中。
【示例第一种】
第二种,如果是浏览器扩展或其他程序阻止的弹出窗口,那么对window.open()通常或抛出一个错误。因此,要想准确地检测出弹出窗口是否被屏蔽,必须在检测返回值的同时,将对window.open()的调用封装在一个try-catch块中。
【示例第一种】
<script type="text/javascript">
var win = window.open('http://www.baidu.com');
if (win == null) {
alert('弹出窗口被屏蔽掉了!');
}
</script>
【示例第二种】
<script type="text/javascript">
var blocked = false;
try{
var win=window.open('http://www.baidu.com');
if(win==null){
blocked=true;
}
} catch (ex) {
blocked = true;
}
if (blocked) {
alert('弹出窗口被屏蔽掉了!');
}
</script>
1.6 关闭窗口
方法:window.close();