《JS高程(3)》BOM-01(window&窗口)-第8章笔记(06)
2017-01-18 14:10
375 查看
BOM(Browser Object Model)
BOM是JavaScript在Web使用中的核心,BOM对象提供了操作浏览器对象的API重点
BOM核心:window对象
控制窗口、框架和弹框
页面信息获取:location对象
浏览器信息获取:navigator对象
BOM核心:window对象
window:浏览器实例,为提供JavaScript访问浏览器窗口的接口的同时,也是Global对象。全局作用域
window:Global全局对象;
全局变量均会成为window的属性,和直接在window上定义的属性差别为:delete操作符可删除window对象上定义的属性,单不能删除全局属性。
通过var创建的属性,[[Configurable]]默认值为false.
var age = 29; window.color = "red"; //IE<9抛出错误,其他浏览器返回false delete window.age; //IE<9抛出错误,其他浏览器返回true delete window.color; alert(window.age); //29 alert(window.color); //undefined
在控制台测试结果:
var age = 29; window.color = 2; delete window.age; delete window.color; console.log(window.age); //29 console.log(window.color); //2 console.log(Object.getOwnPropertyDescriptor(window,'color'));// Object {value: 2, writable: true, enumerable: true, configurable: false}
额,这个是我的浏览器故障了么,好尴尬….
通过window来判断变量是否声明
window作为JavaScript顶层对象(某些运行环境,比如V8、Rhino除外),全局域中所有的变量都是它的属性,所以要判断一个变量是否声明,可以通过确定window是否存在这个属性。
if(window.obj){ alert('存在') }else{ alert('undefined') }
控制窗口、框架和弹框
窗口关系及框架window.frames:返回一个类似数组的窗口本身对象,列出当前窗口所有子框架名字。
通过对框架的访问来修改样式
var frames = window.frames; // or // var frames = window.parent.frames; for (var i = 0; i < frames.length; i++) { // do something with each subframe as frames[i] frames[i].document.body.style.background = "red"; }
window.top : 返回当前窗口对象层次结构中最顶层浏览器窗口。
var topWindow = window.top;
window.parent : 返回当前窗口或子窗口的最直接的父级窗口。
parentWindow = window.parent ;
窗口位置
IE Safari Chrome Opera支持:
- screenLeft;
- screenTop;
Safari Chrome Firefox支持:
- screenX;(返回值为window.top.sreenX)
- screenY;(返回值为window.top.sreenY)
在不同浏览器中去的窗口距屏幕左边和上边的位置:
var left = (typeof window.screenLeft == "number")window.screenLeft:window.screenX; var top= (typeof window.screenTop == "number")window.screenTop .screenY; //在跨浏览器的情况下,无法精准确定窗口的精确坐标
将窗口精确移至某个坐标:
moveTo(x,y):x,y接受新位置的坐标;
moveBy(x,y):x,y接受水平和吹制方向上所移动的像素数。
注:
坐标原点(0,0)为屏幕左上角;
该方法只对window最外层对象使用,且不适用于框架。
窗口大小
窗口中页面视图器的大小(减去边框的宽度)
innerWidth
innerHeight
Safari IE9+ Firefox:返回浏览器窗口本身尺寸
Opera:返回当前单个标签页对应的浏览器窗口
outerWidth
outerHeight
视口与窗口
视口基础设备坐标;
窗口基于逻辑坐标;
在Chrome中,innerHeight=outerHeight, innerWidth=outerWidth时,即为视口尺寸。
页面视口信息
document.documentElement.clientWidth
document.documentElement.clientHeight
在移动IE中提供可见视口尺寸,随着页面缩放,值会跟随变化。
在其他移动浏览器中,document.documentElement为布局视口,即渲染后页面的实际大小(可见视口只是整个页面中的一小部分)
document.body.clientWidth
document.body.clientHeight
在移动IE中提供布局视口尺寸,随着页面缩放,值不会跟随变化。
Chrome在document.documentElement与document.body中均可取得视口的大小;
在使用属性前,先判断用户设备 var pageWidth = window.innerWidth, pageHeight = window.innerHeight; if (type of pageWidth != "number" ) { if(document.compatMode == "CSS1Compat"){ pageWidth = document.documentElement.clientWidth; pageHeight =document.documentElement.clientHeight; }else{ pageWidth = document.body.clientWidth; pageHeight =document.body.clientHeight; } }
移动IE不支持innerWidth,先判断是否为低版本IE浏览器,是的话执行下面语句。
5. 调整浏览器窗口大小
resizeTo(num1,num2):num1,num2接收浏览器窗口的新宽度和新高度;
resizeBy(num1,num2):num1,num2接收浏览器新窗口与旧窗口宽度差和高度差。
在IE7+和Opera中禁用,且只对最外层window对象有效
导航和打开窗口
window.open()
var windowObjectReference = window.open(strUrl, strWindowName, [strWindowFeatures]);
strUrl:在新窗口中加载URL,加载内容可以是HTML,入一张图片,或者任意浏览器所支持的资源;
strWindowName:窗口的名称/目标,若指定target属性或窗口的名称,就会在指定窗口中打开URL;否则,会创建一个新窗口并命名。
strWindowFeatures:特性字符串,包含了新窗口的一组用逗号分割的特性,在窗口打开之后,就不能用JavaScript改变窗口的功能和工具栏的设置。
replace:新页面时候取代浏览器记录历史中当前加载页面的布尔值
var newWindow=window.open('','','width=200,height=100'); newWindow.document.write("This is 'newWindow'"); newWindow.focus();
弹出窗口
当strWindowName值为不存在的窗口或框架,会根据strWindowFeatures传入的字符串创建一个新窗口或新标签页,如果第三个参数,就会按照默认设置打开窗口,在不打开新窗口的情况下,会忽略该参数。
window.open("Url", "newWindow", "height = 500px, width = 200px, top = 10px, left = 10px, location = yes")
打开一个新的浏览器中显示地址栏,大小为500px*200px,上边沿和左边沿距离屏幕10px的窗口。
window.opener在弹出窗口window.top中存在,指向调用window.open()的窗口或框架。
当window.opener=null ,将切断新创建的标签页与打开它的标签页间的关系,当打开原始窗口时,弹窗将不再出现。
安全限制
为避免恶意弹窗,大部分浏览器对弹窗进行了限制,不许关闭状态栏、不许关闭地址栏、不许再屏幕外创建弹窗等、不支持strWindowFeatures等
弹出窗口屏蔽程序
大部分浏览器都有内置弹出窗口屏蔽程序,确定方法:
var wroxWin = window.open("http://www.wrox.com", "_blank"); //通过判断window.open()是否返回null if(wroxWin == null){ alert ("the popup was blocked") }
通过浏览器扩展或其他程序阻止弹出窗口,window.open()会抛出错误。要准确的检验弹出窗口是否被屏蔽,必须在返回检测值的同事,将对window.open()的调用封装在一个try-catch块中:
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 blocker!"); }
4、 间歇调用和超时调用
超时调用:间隔一定时间后执行
设置方式
setTimeout(function(){},time);
参数一:要执行的代码;
参数二:执行前等待的时长(ms);
取消方式
clearTimeout(ID)
间歇调用:每个一段时间调用一次
设置方式
setInterval(function(){},time);
参数一:要执行的代码;
参数二:执行前等待的时长(ms);
取消方式
clearInterval(ID) // 若不停止,将会一直执行至页面卸载
var num = 0; var max = 10; var intervalId = null; function incrementNumber(){ num++; //如果执行次数达到了max设定的值,则取消后续尚未执行的调用 if(num == max){ clearInterval (intervalId); alert("Done"); } } intervalId = setInterval(incrementNumber , 500);
尽量避免使用setInterval(),可以用setTimeout() 模拟间歇调用功能。
var num = 0; var max = 10; function incrementNumber(){ num++; if(num < max){ setTimeout (incrementNumber ,500); }else{ alert("Done"); } } intervalId = setInterval(incrementNumber , 500);
系统对话框
外观由操作系统设定,这几个方法打开的对话框都是同步和模态的,当现实对话框时代码会停止执行,关闭后代码恢复执行。
alert():指定文本+一个OK(“确定”)按钮;
生成“警告对话框”,显示些用户无法控制的消息。
confirm():指定文本+一个OK(“确定”)按钮+一个Cancel(“取消”)按钮;
生成“ 确认对话框”,让用户决定是否决定操作。
//文本显示内容 if (confirm("Are you sure?")){ //true显示内容 alert("I'm so glad you're sure!") }else{ //false显示内容 alert("I'm sorry to hear you're not sure!") }
prompt():指定文本+一个OK(“确定”)按钮+一个Cancel(“取消”)按钮+文本输入域;
生成“ 提示对话框”,让用户决定是否决定操作。
接受两个参数:文本提示和文本输入域默认值(可为空)
var result = prompt("What is your name?", ""); if (result !== null){ alert("Welcome," + result); }
对话框计数器值>=2,对话框会多出一行复选框,以便用户阻止后续的对话框显示,直至再次刷新。浏览器会在空闲时充值计数器。
异步对话框
print():打印对话框
find():查找对话框
页面信息获取:location对象(见07)
浏览器信息获取:navigator对象(见08)
内容太多啦~这两块单分出来写。相关文章推荐
- 《JS高程(3)》BOM-04(screen)-第8章笔记(09)
- JS笔记02-BOM&window
- 《JS高程(3)》BOM-02(location)-第8章笔记(07)
- 《JS高程(3)》BOM-03(navigation)-第8章笔记(08)
- JavaScript高级程序设计之BOM之window 对象之窗口位置第8.1.3讲笔记
- 《JS高程(3)》-第6章笔记(01)
- JavaScript高级程序设计之BOM之window 对象之窗口大小 第8.1.4讲笔记
- js 完整的window.open()控制窗口属性 & open多个窗口
- Javascript高级程序设计--第8章笔记---窗口位置window
- 个人笔记 js 01 js里window.open打开的子页面调用父页面的function
- JS笔记03-BOM&(screen+history)
- IOS开发笔记-01按钮操作-05.IBAction&IBOutlet 06.加法计算器小结 07.关闭键盘
- 【06-23】js动画学习笔记01
- JS高程3:BOM-window对象
- JS笔记04-BOM&(location+navigator)
- JavaScript高级程序设计之BOM之window 对象之导航和打开窗口 第8.1.5讲笔记
- JavaScript高级程序设计之BOM之window 对象之窗口关系及框架 第8.1.2讲笔记
- js window.open('url','_blank') 打开服务器端临时文件, ie窗口一闪而过
- JS学习笔记-BOM之window
- 学习笔记_js(dom,document,bom和window之间的关系)