BOM(Browser Object Model)
BOM(Browser Object Model)浏览器对象模型,它主要处理的是浏览器窗口和框架,独立于内容之外。BOM提供了很多很多对象,用于访问浏览器的功能。
要注意的是,浏览器产商会根据自己的想法去扩展它,所以不同浏览器的实现方式有所不同,不过,浏览器之间有一些共有的对象就成了事实上的标准。
主要的BOM对象有:
- window
- loaction
- navigator
- screen
- history
除次之外还有一些其他的对象,大家可以上W3school上查阅资料!
window
window,这是一个所有浏览器都支持的对象,代表的是浏览器的一个实例,通过它我们可以用js访问浏览器窗口,同时他也是ECMAScript定义的一个global对象。
全局对象及作用域
因为window是一个全局的对象,所以我们在全局作用域下声明的对象、函数及变量会自动变成它下面的成员。
先来看一个例子:
我们在全局作用域中定义了一个变量count和一个函数showCount,他们会成为window对象的属性和方法,但在调用时可以省略window。所以除直接count这样调用,也可以通过window.count这样调用属性或者方法。这时,再调用showCount方法时,方法中的this指代的就是window了,自然this.count就指向了window.count。
Window位置
各种浏览器都提供了window的位置属性来确定浏览器窗口相对于屏幕的位置。
IE、Safari、Chrome、opera都提供了ScreenLeft和ScreenTop属性,代表窗口距离屏幕左边和上方的距离。
FireFox虽然不支持上面两个属性,但提供另外两个属性ScreenX和ScreenY,含义与前两个属性相同,支持这两个属性的还有Safari和Chrome。
附上能在各大浏览器正常获取到属性的兼容代码:
|
|
不过这两对属性获取到的信息还是有些差别:
- screenLeft和screenTop获取到的距离是页面可见区域到屏幕的距离(并不包括滚动栏和上方的工具栏)。
- screenx和screenY则是整个浏览器窗口距离屏幕的距离
moveTo()和moveBy()
除了获取位置信息外,我们还可以通过moveTo和moveBy这两个方法将窗口移到我们想要的地方上去。
moveTo()和moveBy()都接收两个参数,其中moveTo()接收的是新位置的X和Y坐标,moveBy()接收的是在水平和垂直方向上移动的像素数。
例子:
|
|
window尺寸
- innerWidth:浏览器窗口内部宽度
- innerHeight:浏览器窗口内部高度
- outerWidth:浏览器窗口外部宽度
- outerHeight:浏览器窗口外部高度
ps:在Chrome中,这四个属性返回的都是视口(view port)的大小。
IE8及较早版本不支持这些属性,但可以通过DOM获取这些信息。
标准模式下:
document.document.clientWidth
document.document.clientHeight混杂模式下:
document.body.clientWidth
document.body.clientHeight
混杂模式下的Chrome也可以通过这些属性获得视口大小。
附上获取视口大小的兼容代码:
|
|
open()和close()
window.open(url,target,param)
- url:要打开的地址
- target:打开窗口的位置 _blank,_self,_parent(父框架)
- 新窗口的设置参数
window.close()
只有通过 JavaScript 代码打开的窗口才能够由 JavaScript 代码关闭。这阻止了恶意的脚本终止用户的浏览器
location
window.location对象用于获取当前页面的URL,也可将当前页面重定向到新的页面
loaction的一些属性
- hostname:返回web主机的域名
- pathname:返回当前页面的路径和文件名
- port:返回web主机的端口
- protocol:返回所使用的web协议
- hash:返回url中”#“后的字符串
- href:返回当前页面的完整url,location的toString()方法也返回这个值
- search:返回url的查询字符串,字符串以问号开头
位置操作
可以通过location.assign()来改变浏览器的位置。
|
|
调用者方法会在本页面打开新的url,并在历史记录中生成一条记录。其实,当我们给window.location和location.href设置一个url时,最终调用的也是assign()方法。
除了这些浏览器位置的方法,也可通过修改location的一些属性来达到目的。
|
|
上面的操作都会在跳转到新url的同时在历史记录里添加一条新的记录,这样单击后退按钮就可回到之前的页面,我们可以用replace()来避免。
最后一个方法reload()表示重载当前页面,可以添加参数true,代表从服务器重载,也可不传递参数,这样就有可能直接从缓存里加载了。
navigator
navigator对象可以让我们获取到浏览器的信息。
例如可以用plugins来获取文档中安装的插件,或者获取user-agent的值,这里大家可以上w3cschool详细了解。
screen
Screen 对象包含有关客户端显示屏幕的信息,像屏幕的可用高度,或者屏幕的颜色分辨率等等。
history
history对象保存的是用户上网的历史记录。处于安全原因,开发人员无法获取实际的url,但我们可以通过方法实现前进或者后退。
history的属性与方法:
- length:返回浏览器历史记录中的url数量
- forward():加载history列表中的下一个url
- back():加载history列表中的前一个url
- go():可以通过指定正负数值来前进或后退到指定的页面