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. python 快速发送大量邮件

    因为公司需求,需要发送千万封级别邮件. # coding:utf-8 import csv import smtplib from email.mime.text import MIMEText im ...

  2. Linux centos5.6版本下mysql5.6主从环境安装配置

    MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势,国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载.数据库热备等功能.本人在此将如何配置实现做了个简单 ...

  3. 总结一下 IEnumerable 的例子

    本篇将围绕 <试试 IEnumerable 的 10 个小例子>和<试试 IEnumerable 的另外 6 个小例子>给出的例子,总结一下对于 IEnumerable 接口的 ...

  4. oracle实现"limit"功能

    转载于http://blog.sina.com.cn/s/blog_67e2758d0100s3oc.html oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结 ...

  5. 关于手机微信端ios的input不能选中问题解决方案

    最近在做一个微信端的商城,以前做web端的比较多,手机端做的相对来说要少点,老板说让我用俗称”靠谱的移动前端框架”—-AUI来搭建项目. 当时觉得用不用框架无所谓啦.结果后来写到一半把项目发布到手机上 ...

  6. vim编辑中断后,重新编辑的警告删除

    使用vim 编辑,遇到突然中断,比如ssh远程时断网了. 如果再次ssh连接,重新vim 打开之前在编辑的文件,会有类似如下的警告 这是因为vim会在被编辑的目录下新建一个名为.filename.sw ...

  7. Java——内部类详解

    说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类. 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类. 在 ...

  8. 京东物流出问题了?褥了30块羊毛 & 浅析系统架构

    本人亲身经历,但后续的流程分析都是个人猜测的,毕竟没有实际做过这块的业务. 订单物流阻塞经过 火热的双11刚刚退去,截止今日,我在京东购买的矿泉水终于到货啦,下单两箱还只收到了一箱 :( ,从下单到收 ...

  9. React组件略讲

    React是前端组件化开发的开山鼻祖,这种开发方式彻底解决了的前端组件复用的痛点.今天,就来研究一下React组件开发. 前端同学一般都会从Vue入门,因为Vue使用的<template> ...

  10. C#学习笔记04--排序/查找/二维数组/交叉数组

    一. 冒泡排序(重点) 思路:  每次比较把较小的放在前面, 大的放到后面; 图解:下图是最坏情况下的排序 ` 冒泡排序m个元素, 就有(m-1)趟排序, 第一趟m-1次, 第二趟 m-2次....  ...