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

我们都知道, javascript 有三部分构成,ECMAScriptDOMBOM,根据宿主(浏览器)的不同,具体的表现形式也不尽相同,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)对象来访问、控制、修改客户端(浏览器),由于BOMwindow包含了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. JavaEE开发之SpringBoot工程的创建、运行与配置

    本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程.Spring Boot可以使我们更容易的使用Spring框架,在Spring Boot中自动配置了好多东西, ...

  2. Java数据类型(基本数据类型)学习

    Java数据类型(基本数据类型)学习 与其他语言一样,Java编程同样存在,比如int a,float b等.在学习变量之前我就必须先了解Java的数据类型啦. Java的数据类型包括基本数据类型和引 ...

  3. JDK内置日志系统

    1.Java应用中的日志功能 ================= 一般的Java应用程序中都有记录日志的需求,目前主流的记录日志的方法是在应用程序中引入log4j,用log4j来生成日志.其实,JDK ...

  4. leetcode contest 20

    Q1: 520. Detect Capital Given a word, you need to judge whether the usage of capitals in it is right ...

  5. Power Pivot表属性无法切换回表预览模式的问题

    近期Office365用户升级后解决了在Power Pivot中输入中文的问题,但是同时也带来了一个新的问题就是表属性窗口默认为“查询编辑器”模式,且无法切换回“表预览”模式. 本文和您分享在这种情况 ...

  6. scala和java的区别

    scala写程序跟说话一样,都是要把你的思想描述出来,但是scala最大的问题是api的符号标记太复杂, 很多都好难看懂,某些语法太过复杂,上手还是有些难度的.java很规范,但是代码太多,写逻辑很 ...

  7. 超简单jQuary链式操作代码实现手风琴效果

    超简单jQuery代码实现手风琴效果 HTML代码 <div id="cont"> <div> <p>人生若只如初见</p> < ...

  8. Java Stack源码分析

    Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out).java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的 ...

  9. RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17)

    RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...

  10. 大文件拆分问题的java实践(附源码)

    引子 大文件拆分问题涉及到io处理.并发编程.生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一些共性的处理方案和思路,以供后续工作中借 ...