BOM(浏览器对象模型):提供用于访问浏览器的对象。

8.1 window对象

window是BOM的核心对象,表示浏览器的一个实例。

  • JavaScript访问浏览器窗口的接口
  • ECMAScript规定的Global对象

8.1.1 全局作用域

全局变量会成为window的属性,但是定义全局变量和直接在window对象上定义属性是有差别的——全局变量不能通过delete删除,但window对象上定义的可以。

这是因为使用var添加的window属性[[Configurable]]被设置为false(不可删除)。

访问未声明的变量会发生错误,但通过查询window对象,可以知道某个可能未声明的变量是否存在。

//这里会抛出错误,因为oldValue未定义
var newValue = oldValue; //这里不会抛出错误,因为这是一次属性查询
var newValue = window.oldValue; //newValue的值是undefined

8.1.2 窗口关系及框架

如果页面中包含框架,则每个框架都拥有自己的window对象,并保存在frames集合中。在frames集合中可以通过数值索引/框架名称来访问相应的window对象。每个window对象都有一个name属性,其中包含框架的名称。

PS1:对于最高层窗口来说:除非最高层窗口是通过window.open()打开的,否则其window对象的name属性不会包含任何值。

与框架有关的window对象属性(同时也是对象):

  • top:始终指向最高(最外)层的框架,也就是浏览器窗口。使用它可以正确地在一个框架中访问另一个框架。因为对任意一个框架中的代码来说,window对象指向的都是那个框架的特定实例,而非最高层框架。
  • parent:始终指向当前框架的直接上层框架。在没有框架的情况下,parent等于top。
  • self:始终指向window。引入self的目的仅仅是为了和top和parent对象对应,因此他不包含其他值。

8.1.3 窗口位置

用来确定window对象位置的属性:screenLeft, screenTop / screenX, screenY,分别表示窗口相对于屏幕左边和上边的位置。

两组方法分别支持的浏览器:

screenLeft, screenTop IE、Safari、Opera、Chrome
screenX, screenY Firefox、Safari、Chrome

跨浏览器取得窗口位置的代码

var leftPos = (typeof window.screenLeft == "number") ?
window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ?
window.screenTop : window.screenY;

缺点:

  • screenTop表示的是由从屏幕上边到window对象表示的页面可见区域的距离(即页面可见区域上方浏览器工具栏的像素高度)。
  • screenY表示整个浏览器窗口相对于屏幕的坐标值(0)。

将窗口精确移动到一个新位置的方法:

  • moveTo():接收最新位置的x,y坐标值。
  • moveBy():接收在水平和垂直方向上移动的像素数。

PS:这两个方法很可能会被浏览器禁用(Opera和IE7+),且不适合框架,只能对最外层window对象使用。

8.1.4 窗口大小

  IE9+、Safari、Firefox Opera Chrome
innerWidth、innerHeight 视图区大小 该容器中页面视图区的大小(减去边框宽度) 视口大小
outerWidth、outerHeight 浏览器窗口本身的尺寸 页面视图容器的大小(单个标签页对应浏览器窗口的大小) 视口大小

document.documentElement.clientWidth / document.documentElement.clientHeight:保存了页面视口的信息。

resizeTo()和resizeBy():调整浏览器窗口的大小。(分别接收新宽度高度和新窗口与原窗口的宽度和高度之差,同样可能被浏览器禁用)

8.1.5 导航和打开窗口

2020/6/10 JavaScript高级程序设计 BOM的更多相关文章

  1. Javascript高级程序设计——BOM(浏览器对象模型)

    BOM(浏览器对象模型),它提供了独立于内容而与浏览器窗口进行交互的对象.BOM由一系列相关的对象构成.一.window对象      window对象表示整个浏览器窗口,但不必表示其中包含的内容.W ...

  2. 2020/06/05 JavaScript高级程序设计 函数表达式

    函数表达式 函数定义的两种方式: 函数声明(函数声明提升,非标准name属性可访问给函数指定的名字) 函数声明提升:执行代码前先读取函数声明 function functionName(arg0, a ...

  3. 2020/6/11 JavaScript高级程序设计 DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口).他描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 10.1 节点层次 DOM将任何HTML和XML ...

  4. 2020/06/06 JavaScript高级程序设计 面向对象的程序设计

    ECMAScript虽然是一种面向对象的语言,但是他没有类的概念.所以他的对象也与其他语言中的对象有所不同. ECMA-262定义对象:一组没有特定顺序的值. 6.1 理解对象 创建对象的方法: 1. ...

  5. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  6. 《JavaScript高级程序设计》学习笔记

    系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...

  7. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  8. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  9. 《JavaScript高级程序设计》 -- 基本概念(一)

    之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...

随机推荐

  1. Autofac依赖注入

    简介 Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 .它的实现方式是将常规的.net类当做 组件 处理. ...

  2. DOM、事件面试题

    1.DOM 事件级别有哪些? DOM0 a. 通过定义执行函数 element.onclick = function (){ } b. 直接在标签中添加执行语句 Onclick = '语句' 优点:很 ...

  3. (Java实现) 过河卒

    过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为&q ...

  4. Java实现LeetCode #986 - Interval List Intersections

    class Solution { public: vector<Interval> intervalIntersection(vector<Interval>& A, ...

  5. 最新 iOS 框架整体梳理(二)

    在前面一篇中整理出来了一些了,下面的内容是接着上面一篇的接着整理.上篇具体的内容可以点击这里查看:   最新 iOS 框架整体梳理(一) Part - 2          34.CoreTeleph ...

  6. Openshift 4.4 静态 IP 离线安装系列:准备离线资源

    本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Platform (OCP) 4.4.5 的 ...

  7. C# ASP.NET递归循环生成嵌套json结构树

    1. 建立用来保存树结构数据的目标对象 public class TreeObject { public string name { get; set; } public string value { ...

  8. UI 小白设计常用的Website

    网址 设计师导航网址(其实这个用好了,enough) 设计导航1 设计导航2 icon 阿里巴巴Iconfont flaticons icomoon Noun Project 图片(有时候就是灵魂) ...

  9. (二)HttpClient Post请求

    原文链接:https://blog.csdn.net/justry_deng/article/details/81042379 POST无参: /** * POST---无参测试 * * @date ...

  10. Charles 安装证书后依旧抓取不到https请求的解决方案

    1.打开charles——>help——>SSL proxying——>Install Charles Root Certificate 证书安装后,抓取https的包 2.查看Pr ...