1. 简介

ECMAScript是JavaScript的核心,但是如果要在WEB中使用JavaScript,那么BOM则无疑才是真的的核心。BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。BOM没有标准,各浏览器厂商间定义的公共对象,可以作为事实上的标准存在。W3C在HTML5中把BOM纳入了规范中。

2. window对象

window对象:表示浏览器的一个实例。window的双重角色:通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。

2.1. 全局作用域

所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。与直接在window对象上定义属性和方法的区别在于删除操作:window对象上定义的可以delete,全局变量不可以被删除。

// 1. 全局变量为window对象的属性和方法
var age = 29;
function sayAge() { console.log(this.age); } window.age; //
window.sayAge(); // // 2. 全局变量不可删除, window对象的属性和方法可以被删除
window.color = 'red'; delete window.age;
delete window.color; window.age; // 29, 不可删除
window.color; // undefined,可被删除 // 3. 访问全局对象未定义值会抛出异常,访问window属性不会
var newValue = oldValue; // 抛出异常
var newValue = window.oldValue; // undefined

很多全局JavaScript对象(如:location, navigator等)都是window对象的属性。

2.2. 窗口关系与框架

如果页面包含框架,每个框架有自己的window对象,并且保存在 frames 集合中(可以通过数值索引:0开始,从左到右,从上到下,或者框架名来访问window对象)。每个window对象都有一个name属性,用来包含框架名。使用框架的页面中,浏览器中会存在多个Global对象,每个框架内的变量是独立的,不同框架间的变量进行逻辑运算是没有意义的。框架相关对象:

  • top对象: 始终执行最高、最外层的框架,也就是浏览器窗口。通过它可以访问另外一个框架对象,window对象指向的是当前框架自身。
  • parent对象:始终指向当前框架的直接上层框架,某些情况下,parent === top。在没有框架时,parent 一定等于 top.
  • self对象:始终指向window,self与window对象可以互换使用,引入的目的是与top、parent对象对应起来。
<frameset rows="160,*">
<frame src='frame.html' name='topFrame'>
<frameset cols="50%,50%">
<frame src='anotherframe.htm' name='leftFrame'>
<frame src='yetanotherframe.htm' name='rightFrame'>
</frameset>
</frameset> +--------------------------------------------------------------+
| window.frames[0] |
| window.frames['topFrame'] |
| top.Frames[0] |
| frames[0] |
| frames['topFrame'] |
+--------------------------------------------------------------+
| window.frames[1] | window.frames[2] |
| window.frames['leftFrame'] | window.frames['rightFrame'] |
| top.frames[1] | top.frames[2] |
| top.frames['leftFrame'] | top.frmaes['rightFrame'] |
| frames[1] | frames[2] |
| frames['leftFrame'] | frames['rightFrame'] |
+--------------------------------------------------------------+

2.3. 窗口位置

确定浏览器窗口左边、上边的位置:

var leftPos = (typeof window.screenLeft === 'number')? window.screenLeft : window.screenX;
var rightPos = (typeof window.screenTop === 'number)? window.screenTop : window.screenY; // IE, Opera: screenLeft、screenTop保存的是从屏幕左边、上边到由window对象表示的页面可见区域的距离。

moveTo、moveBy方法可以移动浏览器,但是多数浏览器禁用了该功能。

2.4. 窗口大小

IE9+、Firefox、Safari、Opera和Chrome提供4个属性来确定浏览器窗口大小:innerWidth、innerHeight、outerWidth、outerHeight。document.documentElement.clientWidth、document.documentElement.clientHeight保存了页面viewport口的信息。

var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight; if (typeof pageWidth !== 'number') {
if (document.compatMode === 'CSS1Compat') {
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
} else {
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
} window.resizeTo(100, 100); // 调整到 100 x 100
window.resizeBy(100, 50); // 参数为新窗口与原窗口宽度、高度之差。调整到:100 x 50
window.resizeTo(300, 300); // 调整到 300 x 300

resizeTo、resizeBy方法可以调整浏览器窗口的大小,可能被浏览器禁用。

2.5. 导航与打开窗口

window.open(参数1, 参数2, 参数3, 参数4)
参数1:要加载的URL
参数2:窗口目标,在哪里打开窗口,窗口名:'topFrame', 或特殊字符名: _self, _parent, _top 或 _blank. (都需要用引号引上!)
参数3:一个特性字符串,一个逗号分隔的设置字符串,表示新窗口中使用哪些属性,属性表如下表所示。
参数4:一个表示新页面是否取代浏览器历史中当前加载页面的布尔值 var bingWindow = window.open('http://cn.bing.com', 'newBingWindow', 'height=400,width=400,top=10,left=10,resizable=yes');
bingWindow.resizeTo(500, 500);
bingWindow.moveTo(100, 100);
bingWindow.close();
console.log(bingWindow.closed); // true
bingWindow.openar === window; // true
bingWindow.openar === null; // 表示:使用单独的进程运行新标签页(_blank)

参数3属性表:

设置 说明
fullscreen yes | no 仅限IE,是否最大化
height 数值 新窗口的高度,最小值 100
left 数值 新窗口的左坐标,不能为负值
location yes | no 是否显示地址栏,默认 no
menubar yes | no 是否显示菜单栏,默认 no
resizable yes | no 是否可被拖动改变大小,默认 no
scrollbars yes | no 是否允许滚动,默认 no
status yes | no 是否显示状态栏,默认 no
toolbar yes | no 是否显示工具栏,默认 no
top 数值 新窗口的上坐标,不能为负值
width 数值 新窗口的宽度,最小值 100

2.6. 间接调用与超时调用

var timeoutId = setTimeout(function() {}, 1000); // 1000毫秒后执行函数
clearTimeout(timeoutId); var intervalId = setInterval(function () {}, 1000); // 每1000毫秒执行函数一次
clearInterval(intervalId);

3. location对象

最有用的BOM对象之一,提供当前窗口中加载的文档有关信息、一些导航功能。window.location === document.locaiton === location都是指的同一个对象。location对象将 url 解析为不同的属性片段。

属性名 例子 说明
hash ‘#content’ url中#后跟随的零个或多个字符,不包含时,返回空字符串
host ‘www.bing.com 8080’ 服务器名称和端口号
hostname 'www.bing.com' 不带端口号的服务器名称
href 'http://www.bing.com' 当前加载页面的完整URL值,location.toString也返回该值
pathname '/user/login' URL中的目录和(或)文件名
port '8080' 端口号,不含端口号时,返回空字符串
protocol 'http:' 页面使用的协议
search '?next_url=/my/index' URL的查询字符串,以问号开头

查询字符串参数:

function getQueryStringArgs() {
var qs = (location.search.length > 0 ? location.search.substring(1) : ''); // 去掉开头的问号
var args = {};
var items = qs.length ? qs.split('&') : []; for (var i=0; i < items.length; i++) {
var item = items[i].split('=');
var name = decodeURIComponent(item[0]);
var value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
} return args;
}

位置操作:

location.assign('http://cn.bing.com'); // 打开新URL,记录到历史
window.location = 'http://cn.bing.com'; // 会调用assign
location.href = 'http://cn.bing.com'; // 会调用assign
location.hash = '#session1'; // 跳转当前页面增加 #session1
location.search = '?q=js'; // 增加查询字段
... // 其他属性效果一样,不一一介绍。每次都将导致URL重新加载(处理hash属性) location.replace('http://cn.bing.com'); // 跳转页面,但是后退功能禁用了。
location.reload(); // 可能从缓存加载
location.reload(true); // 从服务器加载

4. navigator对象

tbd

5. screen对象

tbd

6. history对象

tbd

7. 总结

tbd

[TimLinux] JavaScript BOM浏览器对象模型的更多相关文章

  1. JavaScript——BOM(浏览器对象模型),时间间隔和暂停

    BOM(浏览器对象模型):能够对浏览器的窗体进行訪问和操作 1.主要的BOM体系: window------------document-------------------------------- ...

  2. 第一百一十一节,JavaScript,BOM浏览器对象模型

    JavaScript,BOM浏览器对象模型 学习要点: 1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM ...

  3. JavaScript Window - 浏览器对象模型

    浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话". 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))尚 ...

  4. javascript之BOM浏览器对象模型引入

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JavaScript(二、BOM 浏览器对象模型)

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

  6. javascript高级程序设计第3版——第8章 BOM(浏览器对象模型)

    第八章,浏览器对象模型 主要介绍了window的几个对象以及框架,窗口的关系,各个浏览器对象的属性以及方法:

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

     1,javascript   组成部分: 1.ECMAscript(核心标准):    定义了基本的语法,比如:if for 数组 字符串 ... 2.BOM  : 浏览器对象模型(Browser ...

  8. JavaScirpt(JS)——BOM浏览器对象模型

    一.BOM概念 BOM(Browser Object Model)即浏览器对象模型.可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相关 ...

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

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

随机推荐

  1. 访问控制列表ACL

    1.ACL Access list ,访问控制列表. 2.作用 限制网络中的地址访问. 3.主要内容 Eg: Router(config)#access-list ? <一>. <1 ...

  2. 微服务SpringCloud之GateWay熔断、限流、重试

    纯洁的微笑的Spring Cloud系列博客终于学完了,也对Spring Cloud有了初步的了解. 修改请求路径的过滤器 StripPrefix Filter 是一个请求路径截取的功能,我们可以利用 ...

  3. 大宇java面试系列(二):jvm组成部分

    1. 说一下 JVM 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Na ...

  4. springboot配置springMVC

    /** * @ClassName MvcConfigure * @Description SpringMVC配置 * @Author JAGNG * @Date 2019/10/28 10:23 ** ...

  5. nyoj 64-鸡兔同笼 (解二元一次方程)

    64-鸡兔同笼 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:26 submit:58 题目描述: 已知鸡和兔的总数量为n,总腿数为m.输入n和m, ...

  6. 力扣(LeetCode)移除元素 个人题解

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  7. 如何在后台封装el-tree所需要的数据格式

    背景 最近遇到了一个分层级展示指标的需求,前端使用el-tree树形组件,要求按官方文档的格式提供数据. 数据格式: id: 1, label: '一级 1', children: id: 4, la ...

  8. 注意android辅助服务事件不能用于保存

    本来希望把来自辅助服务的事件,像epoll那样暂存在队列进行调度,或者做成事件堆栈,从而将辅助服务事件加入到容器.但是一直不能达到预期的后果.最后才发现一个坑人的事实,辅助服务事件被释放(或者说重置) ...

  9. 动手造轮子:实现简单的 EventQueue

    动手造轮子:实现简单的 EventQueue Intro 最近项目里有遇到一些并发的问题,想实现一个队列来将并发的请求一个一个串行处理,可以理解为使用消息队列处理并发问题,之前实现过一个简单的 Eve ...

  10. SpringBoot 源码解析 (八)----- Spring Boot 精髓:事务源码解析

    本篇来讲一下SpringBoot是怎么自动开启事务的,我们先来回顾一下以前SSM中是如何使用事务的 SSM使用事务 导入JDBC依赖包 众所周知,凡是需要跟数据库打交道的,基本上都要添加jdbc的依赖 ...