原文链接http://www.jb51.net/article/55851.htm

我们都知道, javascript 有三部分构成,ECMAScript,DOM和BOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,ie和其他的浏览器风格迥异。

1. DOM 是 W3C 的标准; [所有浏览器公共遵守的标准]
2. BOM 是 各个浏览器厂商根据 DOM
在各自浏览器上的实现;[表现为不同浏览器定义有差别,实现方式不同]
3. window 是 BOM 对象,而非 js 对象;

DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。

BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:

1
2
3
4
5
6
弹出新的浏览器窗口
移动、关闭浏览器窗口以及调整窗口大小
提供 Web 浏览器详细信息的定位对象
提供用户屏幕分辨率详细信息的屏幕对象
对 cookie 的支持
IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象

javacsript是通过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),由于BOM的window包含了document,window对象的属性和方法是直接可以使用而且被感知的,因此可以直接使用window对象的document属性,通过document属性就可以访问、检索、修改XHTML文档内容与结构。因为document对象又是DOM(Document Object Model)模型的根节点。可以说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。其中
DOM包含:window

1
2
3
Window对象包含属性:document、location、navigator、screen、history、frames
 
Document根节点包含子节点:forms、location、anchors、images、links

从window.document已然可以看出,DOM的最根本的对象是BOM的window对象的子对象。

区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口。

BOM 部分

BOM的核心是window,而window对象又具有双重角色,它既是通过js访问浏览器窗口的一个接口,又是一个Global(全局)对象。这意味着在网页中定义的任何对象,变量和函数,都以window作为其global对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
window.close(); //关闭窗口
 
window.alert("message"); //弹出一个具有OK按钮的系统消息框,显示指定的文本
 
window.confirm("Are you sure?"); //弹出一个具有OK和Cancel按钮的询问对话框,返回一个布尔值
 
window.prompt("What's your name?", "Default"); //提示用户输入信息,接受两个参数,即要显示给用户的文本和文本框中的默认值,将文本框中的值作为函数值返回
 
window.status //可以使状态栏的文本暂时改变
 
window.defaultStatus //默认的状态栏信息,可在用户离开当前页面前一直改变文本
 
window.setTimeout("alert('xxx')", 1000); //设置在指定的毫秒数后执行指定的代码,接受2个参数,要执行的代码和等待的毫秒数
 
window.clearTimeout("ID"); //取消还未执行的暂停,将暂停ID传递给它
 
window.setInterval(function, 1000); //无限次地每隔指定的时间段重复一次指定的代码,参数同setTimeout()一样
 
window.clearInterval("ID"); //取消时间间隔,将间隔ID传递给它
 
window.history.go(-1); //访问浏览器窗口的历史,负数为后退,正数为前进
 
window.history.back(); //同上
 
window.history.forward(); //同上
 
window.history.length //可以查看历史中的页面数 

document对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
document对象:实际上是window对象的属性,document == window.document为true,是唯一一个既属于BOM又属于DOM的对象
 
document.lastModified //获取最后一次修改页面的日期的字符串表示
 
document.referrer //用于跟踪用户从哪里链接过来的
 
document.title //获取当前页面的标题,可读写
 
document.URL //获取当前页面的URL,可读写
 
document.anchors[0]或document.anchors["anchName"] //访问页面中所有的锚
 
document.forms[0]或document.forms["formName"] //访问页面中所有的表单
 
document.images[0]或document.images["imgName"] // 访问页面中所有的图像
 
document.links [0]或document.links["linkName"] //访问页面中所有的链接
 
document.applets [0]或document.applets["appletName"] //访问页面中所有的Applet
 
document.embeds [0]或document.embeds["embedName"] //访问页面中所有的嵌入式对象
 
document.write(); 或document.writeln(); //将字符串插入到调用它们的位置

location对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
location对象:表示载入窗口的URL,也可用window.location引用它
 
location.href //当前载入页面的完整URL,如http://www.somewhere.com/pictures/index.htm
 
location.portocol //URL中使用的协议,即双斜杠之前的部分,如http
 
location.host //服务器的名字,如www.wrox.com
 
location.hostname //通常等于host,有时会省略前面的www
 
location.port //URL声明的请求的端口,默认情况下,大多数URL没有端口信息,如8080
 
location.pathname //URL中主机名后的部分,如/pictures/index.htm
 
location.search //执行GET请求的URL中的问号后的部分,又称查询字符串,如?param=xxxx
 
location.hash //如果URL包含#,返回该符号之后的内容,如#anchor1
 
location.assign("http:www.baidu.com"); //同location.href,新地址都会被加到浏览器的历史栈中
 
location.replace("http:www.baidu.com"); //同assign(),但新地址不会被加到浏览器的历史栈中,不能通过back和forward访问
 
location.reload(true | false); //重新载入当前页面,为false时从浏览器缓存中重载,为true时从服务器端重载,默认为false

navigator对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
`navigator`对象:包含大量有关Web浏览器的信息,在检测浏览器及操作系统上非常有用,也可用window.navigator引用它
 
`navigator.appCodeName` //浏览器代码名的字符串表示
 
navigator.appName //官方浏览器名的字符串表示
 
navigator.appVersion //浏览器版本信息的字符串表示
 
navigator.cookieEnabled //如果启用cookie返回true,否则返回false
 
navigator.javaEnabled //如果启用java返回true,否则返回false
 
navigator.platform //浏览器所在计算机平台的字符串表示
 
navigator.plugins //安装在浏览器中的插件数组
 
navigator.taintEnabled //如果启用了数据污点返回true,否则返回false
 
navigator.userAgent //用户代理头的字符串表示 

screen对象

1
2
3
4
5
6
7
8
9
10
11
screen对象:用于获取某些关于用户屏幕的信息,也可用window.screen引用它
 
screen.width/height //屏幕的宽度与高度,以像素计
 
screen.availWidth/availHeight //窗口可以使用的屏幕的宽度和高度,以像素计
 
screen.colorDepth //用户表示颜色的位数,大多数系统采用32位
 
window.moveTo(0, 0);
 
window.resizeTo(screen.availWidth, screen.availHeight); //填充用户的屏幕 

window对象方法

BOM和DOM的结构关系示意图

window对象思维导图

BOM API的更多相关文章

  1. 什么是API?我们常说调用API

    如果你不知道 API 是什么,说明你英语真的很差. API 就是 Application Programming Interface 三个单词,如果你不能顾名思义的话,我就举例说明. 1. DOM A ...

  2. Node.js的核心与红利(zz)

    唯有明晰历史,才能了然当下,预知未来.作者从历史角度解读Node.js,帮助读者透过猜忌和谣言,看清真实的Node.js,了解Node.js的核心与红利. 令人惴惴不安的Node.js 我们越来越频繁 ...

  3. angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )

    更新 : 2018-01-10  大半年过去了依然没有做 server side render 的冲动,但是一直有关注这方便的做法. 今天领悟了一些道理, 这里做个记入. server side re ...

  4. js高级-浏览器事件循环机制Event Loop

    JavaScript 是队列的形式一个个执行的 同一时间只能执行一段代码,单线程的  (队列的数据结构) 浏览器是多线程的 JavaScript执行线程负责执行js代码 UI线程负责UI展示的 Jav ...

  5. 【js】走近小程序

    一.什么是小程序? 基于微信的可以为用户提供一些服务的web项目,利用微信提供的接口可以让所有开发者使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情. 二.小程序开发工具以及语言? 小程序 ...

  6. 从微信小程序开发者工具源码看实现原理(一)- - 小程序架构设计

    使用微信小程序开发已经很长时间了,对小程序开发已经相当熟练了:但是作为一名对技术有追求的前端开发,仅仅熟练掌握小程序的开发感觉还是不够的,我们应该更进一步的去理解其背后实现的原理以及对应的考量,这可能 ...

  7. DOM之节点操作

    DOM提供了很多实用的API,这些API让我们可以轻松的访问HTML文档.所谓API(应用程序接口),简单来说,就是让我们可以直接使用它访问程序的一些属性或方法,而不用了解程序内部的运作过程和原理. ...

  8. 高德JS依赖分析工程及关键原理

    一.背景 高德 App 进行 Bundle 化后,由于业务的复杂性,Bundle 的数量非常多.而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂,需要进行管控,使 Bundle 之间的依 ...

  9. 初识微信小程序

    一.简介 微信小程序是运行在微信环境中的应用,它只能在微信中运行,不能运行在浏览器等其他环境中,微信团队提供了专门的开发工具用于微信小程序的开发,还提供了丰富的API,让我们的小程序能够具备与手机设备 ...

随机推荐

  1. 小米Adnroid默认禁止悬浮框的使用,导致开发的悬浮框无法接收事件

    比如你建了一个悬浮框: WindowManager windowManager = getWindowManager(context); int screenWidth = windowManager ...

  2. 【Windows 10 应用开发】跟随系统主题颜色

    有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步. 实现过程并不复杂,主要用到 UISettings 类,它公开一个 GetColorValue 方法,访问这 ...

  3. 2.let 和 const

    Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行. Babel 提供一个REPL在线编译器,可以在线将 ES6 代码转为 ES5 代码.转换后的 ...

  4. WPF 简易手风琴 (ListBox+Expander)

    概述 之前听说很多大神的成长之路,几乎都有个习惯--写博文,可以有效的对项目进行总结.从而提高开发的经验.所以初学WPF的我想试试,顺便提高一下小学作文的能力.O(∩_∩)O哈哈~ 读万卷书不如行万里 ...

  5. 2017最新最稳定的彩票源码PHP+mysql 新增彩种+全新界面

    网站后台管理系统:新闻资讯系统 用户管理系统用户登录日志彩种规则说明玩法时间设置彩票期号管理足球对阵管理彩票方案撤单彩票出票管理开奖号码管理彩票方案查询彩票中奖查询 彩票追号查询服务支持中心财务中心管 ...

  6. ——————————JavaScript中,对String字符串的一些操作——————————

    ————————————————————————————————————————————————————————————————————————————————————————————— <ht ...

  7. 添加Metasploit-payload到已有的Android项目中

    metasploit在写这篇文章之前,笔者可以说是对java一窍不通,也从来没有写过什么Android应用,在几天的摸爬滚打中终于实现了最终的目的,就是在已有Apk源码的情况下,用了比较另类的方式,添 ...

  8. Redis学习-发布/订阅

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息.Redis 客户端可以订阅任意数量的频道. 常用命令 命令 描述 复杂度 返回 PSUBS ...

  9. 实现ThreadFactory接口生成自定义的线程给Fork/Join框架

    Fork/Join框架是Java7中最有趣的特征之一.它是Executor和ExecutorService接口的一个实现,允许你执行Callable和Runnable任务而不用管理这些执行线程.这个执 ...

  10. JSP页面的静态包含和动态包含

    JSP中有两种包含:静态包含:<%@include file="被包含页面"%>和动态包含:<jsp:include page="被包含页面" ...