javascript高级程序设计第三版 第8章 BOM

BOM(浏览器对象模型)提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。

8.1 window对象

window对象既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。

8.1.1 全局作用域

全局作用域中声明的变量,函数都会变成window对象的属性和方法。

定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。

//使用var语句添加的window属性有一个名为[[Configurable]]的特性,这个特性的值被设置为false,因此这样定义的属性不可以通过delete操作符删除。
var age = 29;
window.color = "red";

//在IE < 9 时抛出错误,在其他所有浏览器中都返回false
delete window.age;

//在IE < 9 时抛出错误,在其他所有浏览器中都返回true
delete window.color;

alert(window.age);//29
alert(window.color);//undefined

尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在。

//这里会抛出错误,因为oldValue未定义
var newValue = oldValue;

//这里不会抛出错误,因为这是一次属性查询
var newValue = window.oldValue;//undefined

8.1.2 窗口关系及框架

top对象始终指向最高(最外)层的框架,也就是浏览器窗口。
window对象指向的都是那个框架的特定实例,而非最高层的框架。
parent(父)对象始终指向当前框架的直接上层框架,在没有框架的情况,parent一定等于top。
self对象,他始终指向window

window.frames[0];
window.frames["topFrame"];
top.frames[0];
top.frames["topFrame"];
frames[0];
frames["topFrame"];

8.1.3 窗口位置

screenLeft和screenTop属性,分别用于表示窗口相对于屏幕左边和上边的位置。
screenX和screenY相同。

8.1.4 窗口大小

用处不大,略

8.1.5 导航和打开窗口

window.open()
window.opener保存着打开它的原始窗口对象。这个属性只在弹出窗口中的最外层window对象(top)中有定义,而且指向调用window.open()的窗口或框架。

//检测弹出窗口是否被屏蔽
var blocked = false;
try{
    var wroxWin = window.open("http://xxx","_blank");
    if(wroxWin == null){
        blocked = true;
    }
} catch (ex){
    blocked = true;
}

if(blocked){
    alert("The popup was blocked!");
}

8.1.6 间歇调用和超时调用

//超时调用,指定的时间过后执行代码,第二个参数告诉JavaScript再过多少时间把当前任务添加到队列中。如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行
var timeoutId = setTimeout(function(){
    alert("Hello world!");
},1000);

//把它取消
clearTimeout(timeoutId);

//间歇调用
var intervalId = setInterval(function(){
    alert("Hello world!");
},1000);

//把它取消
clearInterval(intervalId);

超时调用的代码都是在全局作用域中执行,this的值在非严格模式下指向window对象,在严格模式下是undefined。

使用超时调用来模拟间歇调用的是一种最佳模式。

8.1.7 系统对话框

8.2 location对象

属性名例子
hash“#contents”
host“write.blog.csdn.net:80”
hostname“write.blog.csdn.net”
hrefhttp://write.blog.csdn.net/mdeditor
pathname“/mdeditor”
port“8080”
protocol“http:”
search“?q=javascript”

8.2.1 查询字符串参数

location.search的参数需要用decodeURIComponent()解码

8.2.2 位置操作

打开新URL

location.assign("http://write.blog.csdn.net/mdeditor");
window.location = "http://write.blog.csdn.net/mdeditor";
location.href = "http://write.blog.csdn.net/mdeditor";

修改location对象的属性都会在浏览器历史记录中生成一条新记录,用户可以通过“后退”回到前一个页面。要禁用可以采用replace()方法。

location.replace("http://write.blog.csdn.net/mdeditor");

reload()重新加载当前显示的页面。建议放在最后一行。

location.reload();//重新加载(有可能从缓存中加载)
location.reload(true);//重新加载(从服务器重新加载)

8.3 navigator对象

识别客户端浏览器的事实标准。

8.3.1 检测插件

//非ie,读取插件名判断是否存在
navigator.plugins[i].name

//ie
try{
    new ActiveXObject(name);
    return true;
}catch(ex){
    return false;
}

8.3.2 注册处理程序

8.4 screen对象

8.5 history对象

history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起。

//后退一页
history.go(-1);

//前进一页
history.go(1);

//前进两页
history.go(2);

//跳转到最近的wrox.com页面
history.go("wrox.com");

//后退
history.back();

//前进
history.forward();

history.length;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值