BOM(JavaScript高程笔记)
再次编辑于20160115
一、window对象
双重角色
- JS访问浏览器窗口的接口
- ECAMAscript规定的Global对象
1.全局作用域
所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法
delete的差别
- 直接在window对象上定义的属性可以delete,返回true
- 全局变量不能通过delete操作符删除([configurable] = false),返回false
- IE<9在使用delete删除window属性时会抛出错误
访问未声明变量的差别
访问未声明的变量会抛出错误,但通过查询window对象可知某个未声明的变量是否存在
oldValue; // 抛出错误
window.oldValue; // 返回undefined
2.窗口关系和框架(frames)
略
3.窗口位置
IE、Opera、Safari、Chrome:::
screenLeft、screenTopFirefox、Safari、Chorme:::
screenX、screenY
跨浏览器取得窗口相对于屏幕左边和上边的位置
var leftPos = (typeof window.screenLeft == "number") ?
window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ?
window.screenTop : window.screenY;
1
- IE、Opera:不含浏览器工具栏,即
如果 window 对象是最外层对象,而且浏览器窗口紧贴屏幕最上端,则topPos=工具栏高度 - Firefox、Safari、Chorme:与上相反,含工具栏
2
- IE、Opera:返回当前frame相对屏幕的坐标
- Firefox、Safari、Chorme:始终返回页面中每个框架的 top.screenX 和
top.screenY 值
3
- 然并卵,以上方法无法实现跨浏览器获取窗口精准坐标值...
移动窗口
moveTo(x, y); //参数:新位置的x、y坐标
moveBy(x, y); //参数:x、y方向上移动的像素
- 这两个方法可能会被浏览器禁用,在 Opera 和 IE 7(及更高版本)中默认就
是禁用的。 - 不适用于框架,只能对最外层的 window 对象使用。
4.窗口大小(兼容何解?)
跨浏览器取得页面视口的大小
var pageWidth = window.innerWidth,
pageHeight = window.innerHeight;
if (typeof pageWidth != "number"){
if (document.compatMode == "CSS1Compat"){ // 判断当前浏览器采用的渲染方式
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
} else {
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
}
改变窗口大小
resizeTo();
resizeBy();
- 这两个方法可能会被浏览器禁用,在 Opera 和 IE 7(及更高版本)中默认就
是禁用的。 - 不适用于框架,只能对最外层的 window 对象使用。
5.导航和打开窗口
window.open();
// 参数:URL、窗口目标、窗口特性、是否取代历史记录的布尔值
// 返回指向新窗口的引用,可对其调整大小或移动位置
window.close();
// 关闭用window.open()打开的窗口
top.close();
// 关闭弹出窗口自身
wroxWin.close();
alert(wroxWin.closed); // true
// 弹出窗口关闭之后,窗口的引用仍然还在,只可用于检测其 closed 属性
新窗口的opener属性
- 指向打开它(调用window.open())的原始窗口对象
- 设为null表示新窗口不需要与原始窗口通信,一旦切断联系,就无法恢复
弹窗屏蔽程序
var blocked = false;
try {
var wroxWin = window.open("http://www.wrox.com", "_blank");
if (wroxWin == null){
blocked = true;
}
} catch (ex){
blocked = true;
}
if (blocked){
alert("The popup was blocked!");
}
- 浏览器如有内置屏蔽程序阻止弹出窗口,则window.open()返回null
- 浏览器扩展或其他程序阻止弹出窗口,则window.open()抛出错误
6.超时调用和间歇调用、系统对话框
略
二、location对象
保存当前文档信息、能将URL解析为独立的片段
window.location == document.location; // true
1.查询字符串参数
function getQueryStringArgs(){
//取得查询字符串并去掉开头的问号
var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
//保存数据的对象
args = {},
//取得每一项
items = qs.length ? qs.split("&") : [],
item = null,
name = null,
value = null,
//在 for 循环中使用
i = 0,
len = items.length;
//逐个将每一项添加到 args 对象中
for (i=0; i < len; i++){
item = items[i].split("=");
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] = value;
}
}
return args;
}
2.位置操作
- 设置location.href(修改location的其他属性也可以改变当前页面,生成历史记录,除hash外页面都会以新URL重新加载)
- location.replace("newHref") 位置改变,但不会生成历史记录,并不可后退
- location.reload() 若页面未改变,则从浏览器缓存中重载,要强制从服务器重载则使用location.reload(true)。由于网络延迟或系统资源因素,reload()之后的代码可能不会执行,因此最好将reload()放在代码最后一行
三、 navigator对象
可用于检测浏览器类型
检测插件
- 非IE浏览器-plugins数组(refresh()方法)
- IE浏览器-ActiveXObject类型,COM对象标识符
两种检测插件的方法差别太大,典型做法为针对每个插件分别创建检测函数
//检测插件(在 IE 中无效)
function hasPlugin(name){
name = name.toLowerCase();
for (var i=0; i < navigator.plugins.length; i++){
if (navigator. plugins [i].name.toLowerCase().indexOf(name) > -1){
return true;
}
}
return false;
}
//检测 IE 中的插件
function hasIEPlugin(name){
try {
new ActiveXObject(name);
return true;
} catch (ex){
return false;
}
}
//检测所有浏览器中的 Flash
function hasFlash(){
var result = hasPlugin("Flash");
if (!result){
result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
}
return result;
}
//检测所有浏览器中的 QuickTime
function hasQuickTime(){
var result = hasPlugin("QuickTime");
if (!result){
result = hasIEPlugin("QuickTime.QuickTime");
}
return result;
}
注册处理程序
(不理解)
四、screen对象
五、history对象
开发人员无法得知用户浏览过的URL,但可以在不知道历史URL的情况下实现前进后退
go(); //参数:整数值、字符串,传递字符串会跳转到历史中包含该字符串的最近的位置
back();
forward();
length属性
BOM(JavaScript高程笔记)的更多相关文章
- JAVASCRIPT高程笔记-------第八章 浏览器BOM对象
8.1 window对象--表示一个浏览器的实例 在全局作用域中声明的任何变量.函数都会变成window对象的属性和方法,与之直接定义window对象的属性的区别是 window.xxx 可以通过 ...
- JAVASCRIPT高程笔记-------第五章 引用类型
一.Object类型 1.1创建方式 ①new关键字 : var person = new Oject(); ②给定直接量: var person = { name : "zhangsan& ...
- DOM(JavaScript高程笔记)
一.节点层次 1.Node类型 if (someNode.nodeType == 1){ // 适用于所有浏览器 alert("Node is an element."); } N ...
- 函数表达式(JavaScript高程笔记)
函数声明 特点:函数声明提升(执行代码之前解析器会先读取函数声明,并使其在执行任何代码之前可用,意味着可以把函数声明放在调用语句之后) function functionName(arg0,arg1) ...
- javaScript高程笔记--最佳实践
1.可维护性 <1>什么是可维护的代码 (1)可理解性 (2)直观性 (3)可适应性 (4)可扩展性 (5)可调试性 <2>代码约定 (1)可读性---适当的进行注释[函数和方 ...
- javascript高程笔记:逻辑与和逻辑或
逻辑与和或 逻辑与 当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true.与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型. 而且 ...
- JAVASCRIPT高程笔记-------JSON与AJAX
json对象——语法 简单值:与JS相同语法,可以是字符串,数值,布尔值,null:但不支持undefined 对象: 复杂数据类型,表示一组有序的键值对,键值对的值可以是简单数据,也可以是复杂数据 ...
- JAVASCRIPT高程笔记-------第十章 DOM对象
10.1.1 node类型 --除IE外 所有浏览器都可以访问到这个类型 :JS中所有的节点类型都继承自Node类型 nodeName 与nodeValue 如果是一个元素 那么nodeName中保 ...
- javascript高程笔记-------第四章 变量、作用域和内存问题
首先JavaScript中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.参数传递 javascript中所有参数的传递都是值传 ...
随机推荐
- [原创]K8飞刀20150720 新增Shellcode Loader支持多种格式
工具: K8飞刀编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/7/20 3:00:18 简介: ...
- [Umbraco] 创建第一个页面
如何创建一个页面,很简单. 进入settings,首先右键点击“Document Types”, 在出现的菜单点击"Create",在弹出的窗口中 Master Document ...
- ASM路径问题导致数据库不能正常启动 -- 报:ORA-03113: end-of-file on communication channel
环境描述: 操作系统版本:Red Hat Enterprise Linux Server release 6.5 (Santiago) 数据库版本:Oracle 11.2.0.4 RAC 场景描述: ...
- Linux 服务器部署 PgAdmin 4 Server
PostgreSQL 使用率越来越高,但是好用的图形化软件,诸如 Navicat.DataGrip.HeidiSQL 都是客户端软件,对于访问控制来说,比起 MySQL 的 phpMyAdmin 更加 ...
- 剑指offer四之重建二叉树
一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- ES6箭头函数this指向
普通函数中的this: 1. this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'us ...
- Vue笔记:webpack项目vue启动流程
VUE启动流程 1. package.json 在执行npm run dev的时候,会在当前目录中寻找 package.json 文件, 有点类似 Maven 的 pom.xml 文件,包含项目的名称 ...
- mysql 删除单表内多个字段重复的数据
mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...
- 26-hadoop-hbase简介
hadoop的生态系统 1, hbase简介 –HBase–HadoopDatabase,是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库 –利用HadoopHDFS作为其文件存储系统, ...
- Python模块: 文件和目录os+shutil
一 常用函数 os模块 os.sep 表示默认的文件路径分隔符,windows为\, linux为/os.walk(spath): 用来遍历目录下的文件和子目录os.listdir(dirname): ...