【红宝书】第8章.BOM

浏览器对象模型,用于访问浏览器的功能。W3C为了把浏览器中JS最基本的部分标准化,已将BOM的主要方面纳入HTML5规范。

8.1 window对象

BOM的核心,表示浏览器实例。在浏览器中,window对象即是通过JS访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。

8.1.1全局作用域

由于window对象扮演着ECMAScript中的Global对象,所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。

全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以

let age=29

window.color=”red”

delete window.age //ie<9抛出错误,在其他浏览器返回false

delete window.color //ie<9抛出错误,在其他浏览器返回true

console.log(window.age) // 29

console.log(window.color) //undefined

8.1.2窗口关系及框架(略)

8.1.3窗口位置

窗口相对于屏幕左边和上边的位置

IE、Safari、Opera、Chrome:screenLeft、screenTop

Firefox、Safari、Chrome:screenX、screenY

Opera中并不对应,建议不再Opera中使用。

let leftPos = (typeof window.screenLeft == ‘number’) ? window.screenLeft : window.screenX

对于IE、Opera来说screenTop是浏览器窗口和屏幕的距离,即工具栏高度

对于Firefox、Safari、Chrome是整个浏览器窗口和屏幕的距离,即0

即无法获取准确窗口位置

8.1.4窗口大小

innerWidth、innerHeight 页面视图区,减去边框

outerWidth、outerHeight 浏览器窗口

在Chrome中都为viewport大小

document.documentElement.clientWidth、document.documentElement.clientHeight

保存了页面视口的信息

混杂模式可以用document.body.clientWidth、document.body.clientHeight

8.1.5导航和打开窗口

window.open(要加载的url,窗口目标,特性字符串,新页面是否取代浏览器历史记录中当前加载页面的布尔值)

8.1.6间歇调用和超时调用

超时调用:setTimeout(function(){),time)

setTimeout返回一个数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过他来取消超时调用。

let timeId = setTimeout(function(){},time)

clearTimeout(timeId)

在指定的时间尚未过去之前调用clearTimeout就可以完全取消超时调用。上面的代码在设置超时调用后马上调用了clearTimeout,结果就跟什么都没发生一样。

超时调用的代码都是在全局作用域执行的,因此this非严格模式下指向window,严格模式下指向undefined

间歇调用:setInterval(function(){},time)

clearInterval(intervalId)

let num = 0;

let max = 10;

let intervalId = null;

function fn() {

num++;

if (num === max) {

clearInterval(intervalId);

}

}

intervalId = setInterval(fn, 500);

intervalId = setInterval(function() {

num++;

if (num === max) {

clearInterval(intervalId);

}

}, 500);

超时调用没有必要跟踪超时调用ID因为每次执行完调用就会停止。

一般认为,使用超时调用来模拟间歇调用是一种最佳模式

function fn() {

num++;

if (num < max) {

setTimeout(fn, 500);

} else {

console.log("done");

}

}

setTimeout(fn, 500);

8.1.7系统对话框

alert(‘msg‘) // 只有确定按钮

confirm(‘question‘) // 有确认和取消,可以通过返回的布尔值判断单击的是哪个按钮

if (confirm("Are you sure")) {

// do something

} else {

// do something

}

prompt("tip", "initvalue"); // 提示框,提示用户输入一些文本,返回文本输入域的值,关闭时返回null

8.2 location对象

提供了当前窗口中加载的文档有关的信息,提供了一些导航功能。

即是window对象的属性,也是document对象的属性

也就是window.location和document.location引用的是同一个对象

console.log(location.href)     // 完整URL

console.log(location.protocol) // 协议

console.log(location.hostname) // 域名(服务器名称)

console.log(location.port)     // 端口号

console.log(location.pathname) // 目录和文件名

console.log(location.search)   // 查询字符串

console.log(location.hash)     // 返回URL中的hash

console.log(location.host)     // 域名+端口

8.2.1查询字符串参数

8.2.2位置操作

location.assign(‘http://www.baidu.com‘) // 导航到新页面,在历史记录中生成记录,可返回先前页面

window.location= ‘https://fanyi.baidu.com/‘ // 调用location.assign

location.href=‘https://www.zhihu.com/‘ // 调用location.assign

location.replace(‘http://www.baidu.com‘) // 导航到新页面,bu生成记录,不可返回先前页面

location.reload() // 重新加载(有可能从缓存中加载)

location.reload(true) // 重新加载(从服务器重新加载)

8.3 navigator对象

用于检测显示网页的浏览器类型

检测插件

注册处理程序

8.4 screen对象

表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度。保存着与客户端显示器有关的信息,这些信息一般只用于站点分析。

8.5 history对象

该对象保存着用户上网的历史记录,从窗口被打开的那一刻。

history.go(num)

负数表示向后退转。正数表示向前跳转。

history.go(-1)//后退一页

history.go(2)//前进两页

也可以用history.back()

history.forward()

history.go(‘wrox.com’)  字符串参数

此时浏览器会跳转到历史记录表中包含该字符串的第一个位置。如果不包含则说明都不做。

8.6小结

原文地址:https://www.cnblogs.com/Mijiujs/p/12080377.html

时间: 2024-11-02 20:44:42

【红宝书】第8章.BOM的相关文章

OPENGL 红宝书实验笔记

第一个程序triangles的配置过程,原文链接. OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境搭建指南 书中的地址 http://www.opengl-redbook.com/ 去这里打包下载OpenGL红宝书的示例代码,解压后是这样 虽然没有第一章的代码但第一章的内容好歹算一个完整的例子,网上各种环境搭建教程也都以第一章的代码为例,我们就

【转载】关于在vs2013中配置opengl红宝书第八版环境

 本文为转载 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241 本人刚开始学习opengl,买了一本opengl红宝书第八版, 第一个例子研究了一段时间终于可以运行了,不知道有没有童鞋跟我遇到一样的问题. 下面说说我怎么配置的: 首先去 http://www.opengl-redbook.com/ 下载红宝书的源代码,解压得到这个 然后打开vs2013新建一个空的win32控制台项目, 然后点项目右键属性,点击vc++目

VS2012通过makefile编译OpenGL红宝书的示例代码

> 通过创建新VC项目,然后设置一堆属性,对于懒人来说还是太复杂了.既然它自带了makefile,可以尝试下使用nmake. 需要注意的是VS2012的安装目录里面已经没有GL的头文件和库文件.这个改动应该在VS2010或者更早就已经采用了. 现在有了VS SDK.VS2010自动的SDK目录是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A,更高的版本可能使用v8.0.v8.0A,反正都在这个目录下面.这个目录下面有include.lib文

熬了多少个夜晚,大家期待的《网络工程师思科华为华三实战案例红宝书》即网工必备技术命令大全版本1完书

熬了多少个夜晚,最近也没空更新博客.军哥编写的大家期待的<网络工程师思科华为华三实战案例红宝书>即网工必备技术命令大全版本1完书,一本融合了思科华为华三的实战型辅导书(辅助乾颐堂QCNA课程的).不多说上图 目录关于作者 2本书读者和笔者心语 3本书内容和结构 4第1部分 网络实施基础 15案例0 模拟器的部署和连接管理 16学习利器模拟器简书 160.1 华为模拟器Ensp部署 160.2 思科模拟器EVE部署 310.3 部署SecureCrt管理网络设备 400.3.1 部署终端管理软件

[OpenGL红宝书]第一章 OpenGL概述

第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向OpenGL传输数据 42 将传输数据到OpenGL 43 顶点着色 44 细分着色 45 几何着色 46 图元装配 47 剪切 48 光栅化 49 片元着色 410 逐片元的操作 5 第一个程序深入分析 51 进入main函数 52 OpenGL的初始化过程 初始化顶点数组对象 分配顶点缓存对象 将数

【红宝书】第6章.面向对象的程序设计

面向对象(Object-Oriented,OO) 类 6.1理解对象 创建Object的实例,然后添加属性和方法 let person = new Object(); person.name = "AAA"; person.sayName = function() {}; 对象字面量模式 let person = { name: "AAA", sayName: function() {} }; 6.1.1属性类型 用特性(attribute)描述属性(propert

【红宝书】第7章.函数表达式

定义函数的方法两种 函数声明 function fnName(arg0, arg1, arg2) { //函数体 } 重要特征:函数声明提升 函数表达式 let fnName = function(arg0, arg1, arg2) { //函数体 } 即创建一个匿名函数(因为function关键字后面没有标识符)赋值给变量fnName 使用前必须先赋值 7.1递归 递归函数是一个函数通过名字调用自身的情况下构成的 function fn(num) { if (num <= 1) { retur

【红宝书】第21章Ajax与Comet

AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术 XMLHttpRequest对象 1.1XHR的用法 let xhr = new XMLHttpRequest() open()方法不会真正发送请求,而只是启动一个请求以备发送,接收3个参数:要发送的请求类型.请求URL.是否异步发送请求 xhr.open("get","example.php",false) 发送特定请求,调用send()方法.接收1个参数,即要作为请求主体发送的数据.若没有数据

【红宝书】第22章高级技巧

1.高级函数 1.1安全类型检测 typeof在Safari(第4版修复)老版中对正则表达式应用返回function,instanceof操作符存在多个全局作用域(像一个页面包含多个frame)会有问题,因此该两种检测类型都有一定局限 在任何值上调用Object原生的toString()方法,都会返回一个[Object NaticeConstructorName]格式的字符串. Object.prototype.toString.call(arr) === "[object Array]&quo