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的更多相关文章

  1. JavaScript高级程序设计(第3版)学习笔记·第8章——浏览器对象模型BOM

    转自:http://www.shaoqun.com/a/43768.aspx 访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model),但习惯上是把所有针对浏览器 ...

  2. 浏览器对象模型BOM小结

    概念 BOM (Browser Object Model) 浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window B ...

  3. Javascript学习笔记3 Javascript与BOM简介

    什么是BOM BOM是browser object model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象 ...

  4. 浏览器对象模型BOM

    第二章 浏览器对象模型BOM 1.作用:操作窗口:提供导航对象:提供定位对象:浏览器上方的地址栏:提供跟屏幕相关对象:提供对Cookie的支持 2.根元素:window:代表整个窗口:window,o ...

  5. 浏览器对象模型BOM(Browser Object Model)

    1.结构 BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是w ...

  6. JavaScript编程:浏览器对象模型BOM

    4.浏览器对象模型BOM: document.body.offsetwidth可以获取浏览器宽度. Window对象:          窗口操作:            1.moveBy(dx,dy ...

  7. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  8. JavaScript 浏览器对象模型 (BOM)

    浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器“对话”. 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model)尚无正式标准. 由于现代浏览器已经 ...

  9. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  10. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

随机推荐

  1. vue.js created函数注意事项

    因为created钩子函数是页面一加载完就会调用的函数,所以如果你想在这个组件拿值或者是赋值,很可能this里面能拿到数据,但是如果你用this.赋值的话,控制台或者debugger都会发现this里 ...

  2. HTTP上传大文件要考虑的问题

    1.大文件上传服务器内存占用 一般WEB开发框架如SpringMVC,在基于Web容器如Tomcat处理HTTP请求时,都倾向于采用职责链流水线式的处理机制.HTTP请求被封装为一个可解析对象放在内存 ...

  3. 洛谷P1462通往奥格瑞玛的道路——二分答案最短路

    题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案. 代码如下: #include<iostream> #include ...

  4. 安装和配置Rose HA

    安装和配置Rose HA 1.1.1 安装Rose HA 将roseha的三个安装文件拷贝到/data/install, 便于两台主机的安装. 在没有安装Rose HA 之前,分别修改hosts文件将 ...

  5. Vue 变化检测问题

    受现代Javascript的限制,Vue不能检测到对象属性的添加和删除,因为Vue在初始化时将属性转为getter/setter,所以属性必须在data对象上才能让Vue转换它,Vue不允许在已经创建 ...

  6. Lecture0 -- Introduction&&Linear Regression with One Variable

    Introduction What is machine learning? Tom Mitchell provides a more modern definition: "A compu ...

  7. MPTCP in Wireshark(转)

    最新的wireshark可以直接识别出mptcp. Wireshark is a widely used network analyzer that can capture network traff ...

  8. TypeScript完全解读(26课时)_17.装饰器

    实验性的特性,需要在tslint里面把这项设置为true 作用域类的声明方法.访问符.属性和参数上 使用@符号加一个名字来定义,名字必须是一个函数,或者求值后是一个函数 装饰器工厂,setPro当做一 ...

  9. Flutter实战视频-移动电商-24.Provide状态管理基础

    24.Provide状态管理基础 Flutter | 状态管理特别篇 —— Provide:https://juejin.im/post/5c6d4b52f265da2dc675b407?tdsour ...

  10. Flutter实战视频-移动电商-55.购物车_底部结算栏UI制作

    55.购物车_底部结算栏UI制作 主要做下面结算这一栏目 cart_bottom.dart页面 先设置下内边距 拆分成三个子元素 全选 因为有一个文本框和一个全选的text文本,所以这里也用了Row布 ...