【学习笔记】八:浏览器对象模型BOM
1.window对象
window是BOM的核心,它既是JS访问浏览器的一个接口,又是ES规定的Global对象。
1)全局作用域对象
a.所有在全局作用域中声明的变量、函数都会成为window对象的属性和方法。
b.定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除(使用var语句添加的window属性[[Configurable]]特性为false),而直接在window对象上定义的属性可以。
c.尝试访问未声明的变量会抛出错误,但是通过查询window 对象,可以知道某个未声明的变量是否存在。
2)窗口关系及框架
如果页面中包含框架,则每个框架都有自己的window对象,并且保存在frames集合中。其中top对象指向最外层框架即浏览器窗口,parent对象指向当前框架的直接上层框架,self对象等于window对象。
由于不同框架中的window对象都有自己的一套构造函数,一一对应,但并不相同,这个问题会影响到对跨框架传递的对象使用instanceof操作符。
3)窗口位置
window对象中确定和修改位置的属性和方法有很多,但是各个浏览器有很大区别。
screenLeft、screenTop:IE、Safari、Opera、Chrome
screenX、screenY:FireFox、Safari、Chrome(Opera也支持这两个属性,但是和在其他浏览器中的意义并不相同)
同时,screenLeft、screenTop在IE、Opera中指屏幕相应边缘到浏览器窗口可见区域的位置,而在Chrome、Firefox、Safari中,screenY或screenTop指相对于浏览器窗口的位置。top.screenX、topscreenY也存在不一致问题,在Chrome、Firefox、Safari中无论框架是否设置外边距始终都会返回相同的值,忽略这个外边距,而在IE和Opera中会返回框架相对于屏幕边缘的精确值。
moveTo()、moveBy(),这两个方法在每个浏览器中倒是没有差别,但是在浏览器中这两个方法可能会被禁用,且这两个方法只能对最外层window对象使用。
4)窗口大小
innerWidth、innerHeight、outerWidth、outerHeight,但是这些属性在不同的浏览器中有一些差别。
resizeTo()、resizeBy()可以调整浏览器窗口的大小,但是同样,这两个方法可能在浏览器中被禁用,且这两个方法只能对最外层window对象使用。
5)导航和窗口打开
window.open();四个参数:要加载的URL、目标窗口、特性字符串、一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值(只在不打开新窗口的情况下使用)
a.window.open()返回一个指向新打开窗口的对象引用、同时这个引用还有一个opener属性值,指向打开它的原始窗口。
b.安全限制:为了安全考虑,限制一些恶意的广告弹窗,不同的浏览器对open()函数的第三个特性字符串控制的特性做了限制。
c.弹窗屏蔽检测:浏览器内置的屏蔽程序阻止的弹出框,window.open()返回null,浏览器扩展或者其他程序阻止的,通常会抛出错误。通过检测这个返回值,判断屏蔽情况。
6)间歇调用和超时调用
setTimeout():超时调用,经过设定的时间后,把当前任务添加到任务队列中。(因为js是单线程的,所以经过指定时间后指定的代码不一定执行,只是把它放到任务队列中)。clearTimeout()
setInterval():间歇调用。clearInterval()
一般认为使用超时调用来模拟间歇调用是一种最佳模式。在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。而使用超时调用模拟,则完全可以避免这一点。
7)系统对话框
alert(()、confirm()、prompt():同步的,会阻止后续代码的执行
find()、print():异步的,不会阻止后续代码的执行
2.location对象
它提供了与当前窗口中加载的文档相关的信息,还提供了一些导航功能。window.location = document.location,同时它还具有一系列属性,保存着URL中的一些信息。
location.href、window.location、location.assign()作用相同,都是在当前页面中打开设置的URL对应的页面,且会在浏览器历史记录中插入一条记录,一般我们常使用location.href
可以通过设置location的hash、search、hostname、pathname、port属性来改变URL,这种方式也会使浏览器以新URL重新加载,且会在浏览器历史记录中插入一条记录。
location.replace()方式会使浏览器加载新URL,但不会在浏览器历史记录中生成新纪录,而是替换掉浏览器历史记录中当前显示的页面。
location.reload(),以最有效的方式重新加载页面(可能从缓存中加载)、location.reload(true)从服务器重新加载
3.navigator对象——保存客户端浏览器的相关信息
1)插件检测:IE和非IE对应不同的方法
2)注册处理程序:registerContentHandler()和registerProtocolHandler()方法让一个站点指明它可以处理特定类型的信息。
4.screen对象——记录了客户端屏幕的相关信息,一般用处不大,多用于站点分析。
5.history对象——保存着用户的上网历史记录,出于安全考虑,无法得知用户访问过得URL,但是可以利用相应方法实现针对某一历史记录的相应跳转和获取历史记录的数量。
history.go()、history.back()、history.forward()、history.length
【学习笔记】八:浏览器对象模型BOM的更多相关文章
- JavaScript高级程序设计(第3版)学习笔记·第8章——浏览器对象模型BOM
转自:http://www.shaoqun.com/a/43768.aspx 访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model),但习惯上是把所有针对浏览器 ...
- 浏览器对象模型BOM小结
概念 BOM (Browser Object Model) 浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window B ...
- Javascript学习笔记3 Javascript与BOM简介
什么是BOM BOM是browser object model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象 ...
- 浏览器对象模型BOM
第二章 浏览器对象模型BOM 1.作用:操作窗口:提供导航对象:提供定位对象:浏览器上方的地址栏:提供跟屏幕相关对象:提供对Cookie的支持 2.根元素:window:代表整个窗口:window,o ...
- 浏览器对象模型BOM(Browser Object Model)
1.结构 BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是w ...
- JavaScript编程:浏览器对象模型BOM
4.浏览器对象模型BOM: document.body.offsetwidth可以获取浏览器宽度. Window对象: 窗口操作: 1.moveBy(dx,dy ...
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- JavaScript 浏览器对象模型 (BOM)
浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器“对话”. 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model)尚无正式标准. 由于现代浏览器已经 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
随机推荐
- Spring Boot配置多个DataSource
使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 百牛信息技术bainiu.ltd整理发布于博客园 如果在 ...
- ORM学习 一 : JPA JDBC
JDBC jdbc是一组规范,是接口,由不同的数据库厂商各自提供相应的实现类,打包成jar包,也就是所谓的数据库驱动.而我们的java应用程序,只需要调用jdbc的接口就可以了. 什么是JPA Jav ...
- 使用 Git 命令去管理项目的版本控制(一)
参考资料:参考 参考 声明本文是作者原创,是自己的学习笔记,仅供学习参考. 在 10.11.2Mac系统中,要显示隐藏的文件夹使用命令行: defaults write com.apple.find ...
- Python_XML的三种解析方法
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...
- 量子隐形传态1 Quantum Teleportation
量子隐形传态是量子纠缠的又一个应用. 隐形传态,所谓隐形的意思就是没有物质介质就传递了信息,在经典世界,传递信息要有介质,光.电磁波或者其他的什么,但是在量子的世界里,我可以把信息传递给你,并且不传递 ...
- mysql添加DATETIME类型字段导致Invalid default value错误的问题
例如: CREATE TABLE foo ( `creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP, `modification_time` DATET ...
- Fitnesse中TemplateLibrary的使用方法
1.新建一个SuitePage,命名为TemplateLibrary 2.然后如下图,添加作为template的TestPage,如下面的Get 3.在Get page中添加template内容,如下 ...
- 细说CSS中的display属性
相信大部分奋战在前端的,尤其在前端攻城的过程中,有一种越陷越深的感觉,不错,一如前端深似海,从此妹子是浮云啊,前端上手容易,深入难啊!下面我就CSS中的display属性讲下我自己所积累的,与大家共享 ...
- C++ STL map使用
Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数:map<string , in ...
- java读取properties文件的配置信息
项目开发中,我们一般来向 application.properties 文件中放一些全局配置变量,以便程序中读取使用,本篇内容来演示从properties配置文件中读取键值. 当然,我们不一定写入 a ...