JavaScript之BOM(1)

本文介绍了浏览器对象模型(BOM)的核心概念和技术细节,包括window对象的作用域、位置与大小的跨浏览器处理方式、导航与打开窗口的方法、定时调用及系统对话框的使用,以及location对象的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ECMAscript是JavaScript的核心,如果在web中使用JavaScript,那么BOM(浏览器对象模型)无疑才是真正的核心。

window对象

1 全局作用域
window对象在ECMAscript扮演着global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。
var name = "黑猫";
function say(){
	console.log(this.name);
}
console.log(window.name);  //黑猫
say();  //黑猫
window.say(); //黑猫
Tip:全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。
var age = 23;
window.color = "red";
//在ie<9时抛出错误,其他浏览器返回false
delete window.age;
//在ie<9时抛出错误,其他浏览器返回true
delete window.color;
console.log(window.age);  //23
console.log(window.color); //undefined
使用var语句添加的window属性有一个名为configurable的特性,这个特性被设置为false,因此定义的属性不可以通过delete删除。
Tip:访问未声明的变量会抛出错误。

2 窗口位置
IE、Safari、Opera、Chrome都支持screenLeft和screenRight属性,分别用于表示窗口相对于屏幕左边和上边的位置。
Safari、Firefox、Chrome支持screenX和screenY。
Opera也支持screenX和screenY,但是和screenLeft和screenRight属性不对应,不建议在Opera中使用。

var left = (typeof window.screenLeft == "number") ? window.screenLeft:window.screenX;
var right = (typeof window.screenRight == "number") ? window.screenRight:window.screenY;
console.log(left + " and " + right); // 0 and 0
里面还有一些小问题,IE和Opera中,screenLeft和screenRight保存的是屏幕左边和上边由window对象表示的页面可见区域的距离。
moveTo(接受的是新的X,Y坐标),moveBy(接收的是在水平上移动的像素数)
但是这两个方法可能会被浏览器禁用,另外这两个方法不适用于框架,只能对window最外层使用。

3 窗口大小
跨浏览器确定窗口大小很麻烦。
IE9+、Firefox、Safari、Opera和chrome都提供了:innerHeight、innerWidth、outerHeight、outerWidth四个属性。
IE9+、Firefox、Safari中,outerHeight、outerWidth返回浏览器本身的尺寸。Opera中这两个值表示页面视图容器的大小。
innerHeight、innerWidth表示该容器中页面视图区的大小(减去边框宽度)
chrome中innerHeight、innerWidth和outerHeight、outerWidth返回的一样的。
var width = window.innerWidth;
var height = window.innerHeight;
if (typeof width != "number") {
	if (document.compatMode == "CSS1Compat") {
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	} else{
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}
} 
console.log(width + " and " + height);
对于移动设备,window.innerWidth和window.innerHeight保存着可见视口,也就是屏幕可见页面区域的大小。
移动IE浏览器不支持这些属性,但通过document.documentElement.clientHeight提供了相同的信息。随着页面的缩放,这些值也会相应变化。
 调整窗口:
resizeTo():接受浏览器的新宽度和新高度;
resizeBy():接受新年窗口和原窗口的宽度和高度之差。
Tip:这两种方法不适用于框架,而只能对最外层的window对象使用。

4 导航和打开窗口
这一块主要说window.open方法,可以接受多个参数,一般来说:
第一个参数为url:window.open(“url”);
第二个参数可以是已存在的窗口或者框架名或者_self、_parent、_top、_blank;
第三个参数通过逗号分隔的名值对列表指定,包括height、width、fullscreen、left、location、menubar、resizable、scrollbars、status、toolbar等等。

close方法可以关闭窗口。
5 间歇调用和超时调用
超时调用:只执行一次。
setTimeout(function(){
	console.log(1);
},1000);
但是这样写会造成性能损失。一般推荐:
var time = setTimeout(function(){
	console.log(1);
},1000);
取消调用:
clearTimeout(time);
间歇调用:按照指定的时间重复执行代码。
var time = setInterval(function(){
	console.log(1);
},1000);
取消
clearInterval(time);
6 系统对话框
浏览器通过prompt、alert、confirm三种方法调用系统对话框。

1、alert
只接受一个参数:弹出内容。
2、prompt
点击出“确认”外的按钮返回null。
var pro = prompt("ss","");
if (pro == null) {
	console.log("null");
} else{
	console.log(pro);//输入的值
}
3、confirm
if (confirm(1)) {
	console.log("t");
} else{
	console.log("f");
}
还有其他两个可以打开提示窗口的方法:

//显示打印
window.print();
//显示查找
window.find();

location对象

location有点特别,主要是因为它既是window对象的属性也是document对象的属性,也就是说window.location和document.location引用的是同一个对象。
其作用是:1、保存当前文档的信息;2、将URL解析成独立的片段。
location对象的主要属性:
hash、host、hostname、href、pathname、port、protocol、search


待续。。。。

































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值