Javascript高级编程学习笔记(27)—— BOM(1)window对象1
ECMAScript是JS的核心
但是对于在浏览器中运行的JS,BOM显然才是真正的核心
我们知道JS是由三个部分组成的 BOM、DOM、ECMAScript
之前的文章我们主要介绍的是ECMAScript
也就是JS的核心语法
但是JS作为一种脚本语言,其创建的初衷不就是为了控制浏览器中的页面的表现形势嘛
所以JS与浏览器的交互由什么控制呢?
当然就是我们的BOM了(浏览器对象模型)
BOM提供了一系列的对象用于访问浏览器的功能,由于各个厂商会按照各自的想法去拓展它
所以只有其中的一部分被标准化,并被纳入HTML5规范
下面我们就来聊聊标准化的这些内容
Window对象
Bom对象的核心是window,在浏览器环境中这个对象除了是JS访问浏览器功能的接口对象外
还是JS的Global对象,parseInt等全局方法在浏览器环境中也就属于window对象
由于window对象也是浏览器环境中的全局对象
所以全局变量和全局方法最终都会是 window 对象的属性和方法
不过要注意的地方在于,为window对象定义属性,和声明全局变量是有区别的
看以下代码
var a = 10;
window.b = 10;
虽然变量 a 可以通过window.a 进行访问
但是我们不能通过 delete 操作符来删除 window.a
却可以删除 window.b
这是因为虽然全局变量会作为 window对象的属性,但是这个属性有个特点
那就是这个属性的特性 [[Configurable]] 是false,所以我们不能通过delete来删除它
这也是浏览器环境中所有全局变量,储存在window对象上的特点
窗口关系及框架
如果你的浏览器中包含框架(另外的窗口),那么每个窗口都有自己的window对象
每个window对象都有frames属性,该属性的值为一个数组
window.frames 数组中我们可以访问所有的window对象
这些框架的索引从0开始,从左到右,从上到下增加
每个 window 都有一个name属性,也就是当前框架的名称
也可以在 frames 数组中通过window的name进行索引
为了避免层级关系的混淆,Bom还有 top、parent对象
top指向当前的框架最顶层,也就是浏览器窗口
而 parent 指向当前窗口的父级框架
有时候 top会等于parent
但在不包含框架的页面中 top 一定等于 parent
除此而外还有个 self 用于标识当前window,但是只是为了与top、parent对应,并没有什么特殊的功能
PS. 由于框架之间的window 对象是独立的,所以都拥有独立的构造函数,所以 a窗口的Array类型不等于b窗口的Array类型
窗口位置
除火狐而外的浏览器都通过 screenLeft、screenTop来提供当前窗口相对于屏幕的坐标
火狐使用 screenX、screenY来提供相应属性
跨浏览器兼容如下
var left = (typeof window.screenLeft ==="number")?window.screenLeft:window.screenX;
var top = (typeof window.screenTop ==="number")?window.screenTop:window.screenY;
moveTo(x,y) 将窗口移动到屏幕的指定位置
moveBy(x,y)窗口水平移动x,垂直移动y
要注意的是上述方法虽然可以移动浏览器窗口,但绝大多数情况下都会被浏览器禁用
窗口大小
由于获取浏览器窗口的大小,各个浏览器实现、行为各异
所以就不多说
主要说明一下获取可视区域的大小
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.clientWidht;
pageHeight = document.body.clinetHeight;
}
}
这里也有两个方法控制窗口大小
resizeTo()
resizeBy()
使用和上面的move类似to是移动到某个坐标,by是朝垂直和水平分别移动多少
当然,这两个方法也很有可能被浏览器禁用
今天就先介绍这么多,明天继续~~~
Javascript高级编程学习笔记(27)—— BOM(1)window对象1的更多相关文章
- Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象
什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...
- Javascript高级编程学习笔记(31)—— BOM(5)screen、history对象
screen对象 screen对象应该是BOM对象中最不常用的对象了 其主要用于提供客户端的显示能力信息 包括浏览器外部显示的信息,和像素的宽高等 这个对象的主要用于检测客户端能力,一般不会影响功能 ...
- Javascript高级编程学习笔记(30)—— BOM(4)navigator对象
window对象作为浏览器的全局对象.location对象保存了页面的url信息 那么navigator对象又有什么作用呢? navigator对象 该对象最早由 Netspace Navigator ...
- Javascript高级编程学习笔记(29)—— BOM(3)location对象
在JS中location是一个神奇的对象 它既是window对象的属性,也是document对象的属性 它的作用主要在于保存当前文档页面的信息,以及将 url 解析为独立的片段 location对象属 ...
- Javascript高级编程学习笔记(28)—— BOM(2)window对象2
今天讲一下window对象和浏览器导航,弹窗等有关的内容 导航和打开窗口 window.open() 用于导航到某个特定 url 该方法接收四个参数 1.url 2.窗口目标(当页面中有多个框架fra ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Javascript高级编程学习笔记(35)—— DOM(1)节点
DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
随机推荐
- wpf 加载资源文件
方法一:App.xaml页面上写 <Application x:Class="LanguageChange.App" xmlns="http://schemas.m ...
- File初识和练习
目录 File类 File对象的构建 File文件名.路径的获取 文件的状态 文件的其他操作 创建文件夹 列出下一级 实战练习1:列出子孙级目录及名称 实战练习2:列出文件及其子孙文件的总大小 实战练 ...
- mac sublime3 无法安装Package Control
一.在线安装 1.打开sublime,Ctrl+` 打开控制台, 输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedc ...
- mr统计每年中每月温度的前三名
weatherMapper package com.laoxiao.mr.weather; import java.text.ParseException; import java.text.Simp ...
- Python之路(第三十七篇)并发编程:进程、multiprocess模块、创建进程方式、join()、守护进程
一.在python程序中的进程操作 之前已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序 ...
- Sqlite3数据库查看工具
SQLiteSpy 小巧便捷,免安装,占空间小. 推荐 http://www.softpedia.com/get/Internet/Servers/Database-Utils/SQLiteS ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...
- C语言闰年问题程序框图
判定2000-2500年中的每一年是否为闰年,并将结果输出. 先分析闰年成立条件: 1)能被4整除,但不能被100整除的年份都是闰年: (2)能被400整除的年份是闰年: #include<st ...
- 接口约束的另一种方法:Class类的isAssignableFrom
Class类的isAssignableFrom是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下: public native boo ...
- IPC rtsp转发服务器搭建
sudo apt-get install libmoose-perl liburi-perl libmoosex-getopt-perl libsocket6-perl libanyevent-per ...