window对象
- 全局作用域
1.在全局作用域中声明变量和函数都会变成window对象的属性和方法
var age =29;
window.age //29
2.全局变量和在window对象上直接定义的属性差别
delete | 访问未声明的变量 | ||
---|---|---|---|
window对象的属性/方法 | 可以用delete删除 eg:window.color="red" delete window.color; //除IE<9,其他返回true 注意:IE<9时,delete会抛出错误 | 可以访问,属性查询 eg:var newvalue=window.oldvalue;//undefined | |
全局变量 var variables | 不可用delete删除 原因:[[Configurable]]特性为false(为什么) eg: var age=29; delete window.age; //除IE<9,其他返回false | 不可访问 eg:var newvalue=oldvalue;//会抛出错误 |
3.注意:Windows Mobile的IE不能通过window.property=value去访问或创建
- 窗口and框架(frame)
- 窗口位置
!!跨浏览器获取窗口位置的方法!!
var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft:window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop:window.screenY;
IE | screenLeft/screenTop,保存屏幕左边/上边到由window对象表示的页面可见区域 |
Safari | screenLeft/screenTop,保存屏幕左边/上边到整个浏览器窗口的距离 |
Opera | screenLeft/screenTop,保存屏幕左边/上边到由window对象表示的页面可见区域 screenX/screenY也支持,但不对应,建议不要用 |
Chrome | screenLeft/screenTop,保存屏幕左边/上边到整个浏览器窗口的距离 |
Firefox | screenX/screenY,保存屏幕左边/上边到整个浏览器窗口的距离 |
moveTo(),moveBy()不建议使用(被浏览器禁用)
- 窗口大小
!!跨浏览器获取页面适口大小的方法!!(浏览器窗口本身的大小难确定)
//var pageWidth = window.innerWidth;
//var pageHeight = window.innerHeight;
//if(typeof pageWidth != "number")
//{
if(document.compatMode == "CSS1Compat" )
{
pageWidth = document.documentElement.clientWidth;
pageHeight= document.documentElement.clientHeight;
}
//IE6的混杂模式
else{
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
//}
电脑
Chrome | outerWidth/Height、innerWidth、document.documentElement.clientWidth都是视口大小 | ||
Firefox | outerWidth:浏览器窗口本身大小 | innerWidth:容器页面视图区大小 | document.documentElement.clientWidth视口大小 |
Safari | outerWidth:浏览器窗口本身大小 | innerWidth:容器页面视图区大小 | document.documentElement.clientWidth视口大小 |
Opera | outerWidth:页面视图容器大小 | nnerWidth:容器页面视图区大小 | document.documentElement.clientWidth视口大小 |
IE9+ | outerWidth:浏览器窗口本身大小 | innerWidth:容器页面视图区大小 | document.documentElement.clientWidth视口大小 |
IE8- | 没有提供浏览器窗口尺寸的属性 | IE6标准模式:document.documentElement.clientWidth视口大小 IE6混杂模式:document.body.clientWidth视口大小 |
移动设备
比较复杂,详情请看移动开发咨询师Peter-Paul Koch的建议
resiezeTo(新宽,新高)
resizeBy(与原来的宽度差,与原来的高度差)
可能被浏览器禁用,IE7+和Opera禁用,框架不适用
导航和打开窗口
- 弹出窗口
open(url,窗口目标,特性字符串,取代历史记录布尔值)
第四个参数在窗口目标为原来的窗口时才存在
如果窗口目标是新的窗口或框架,才需特性字符串,设置新窗口的各个属性
window.open("https://www.imooc.com/learn/10","baidu","height=400,width=400,top=10,left=10,resizabable=yes");
窗口对象.close():关闭用open()打开的窗口。
窗口对象.opener():与打开它或它打开的窗口之间的通信。
- 安全限制
Chrome | 屏蔽弹出窗口,显示标题栏放在浏览器右下角 | ||
Firefox | 不允许修改状态栏,强制在弹出窗口显示地址栏 | ||
Opera | 主浏览器窗口中打开弹出窗口,不允许与系统对话框混淆 | ||
|
- 弹出窗口屏蔽程序
yahoo! Toolbar
浏览器内置屏蔽程序组织弹出窗口检测:
var wrowin = window.open("http://baidu.com","_blank");
if(wrowin.open==nulll){dosomething}
对其他程序,抛出错误
var blocked false;
try{
var wrowin = window.open("http://baidu.com",_blank);
if(wrowin==null){
blocked = true;
}
}
catch(ex){blocked = true;}
if(blocked){dosomething}