JavaScript乱弹之(三)管理浏览器窗口
曾几何时,弹出式窗口大行其道,随着浏览器的竞争态势愈演愈烈,虽然给开发者带来极大的不便,但是浏览器的规范化已经成为了共识。如今弹出式窗口的局面已经有效地得到了控制,如果你要在页面中通过脚本打开一个新窗口,那么许多“潜规则”你必须要有所了解。
与窗口相关的绝大部分行为都涉及到window对象,window对象涉及大量的属性和方法,但是在不同的浏览器之间确实千差万别。部分原因是由于window对象是脚本任务中最大的全局上下文。IE利用这个上下文为window对象嵌入了许多与浏览器和操作系统相关的属性和方法,而Mozilla却认为window对象的属性会威胁用户的隐私,因此只能通过被服务器打上电子标签的脚本来访问,这些脚本的来源必须经过用户的明确允许(带有签名的脚本)。
八条"潜规则"
潜规则一:不要修改主窗口的界面元素(chrome)
比如状态栏、菜单栏、滚动条、工具栏、标题栏等。唯一的定制窗口界面的方法是打开一个全新的窗口。
潜规则二:不要在子窗口中通过脚本关闭主窗口
尽管可以使用opener.close()方法来实现。
潜规则三:不要试图替用户关闭主窗口之外的其他窗口
因为通过脚本你无法得知用户打开了多少个窗口。
潜规则四:不要试图访问位于其他域的窗口的文档属性
因为这会引发潜在的恶意时间,浏览器都实现了同源安全策略--除非两窗口来自于同一域中的同一服务器,且协议相同,否则不能通过脚本访问另一窗口的关键细节。
潜规则五:不要试图阻止或者激活浏览器的窗口按钮
许多开发人员希望拦截后退和前进按钮来控制浏览器的导航,但是这些用户动作不会出现在window对象中。
潜规则六:不要试图改变地址栏的内容
脚本唯一能做的是通过location.href赋值使其渲染新页面。
潜规则七:不要试图添加或删除收藏夹的项目
在IE中window.external.AddFavorite("URL","Title")方法可以添加到收藏夹,即使是这个功能,添加之前也会询问用户是否允许。收藏夹是用户私有的,不应该暴露给脚本。
潜规则八:不要试图修改浏览器偏好设置
Mozilla允许带有签名的脚本应用程序的偏好设置,该功能是网络管理功能。
设置窗口的尺寸
1.window.resizeTo(800,600);设置窗口为指定尺寸
2.window.resizeBy(50,-10);按一定像素增大或缩小窗口
调整窗口大小使其符合指定内容大小,并不简单。Mozilla,Opera和Safari提供了一对读写属性可以对窗口的内容区域进行特殊控制--innerHeight和innerwidth,而IE只提供了只读操作document.body.parentNode.clientHeight(clientWidth)。
注意:设置窗口的外围尺寸来管理内容区域的思想是糟糕的,用户可能选择工具栏进行设置或者浏览器的操作询问都会影响到你精心设计的布局。
移动窗口
3.window.moveTo(10,20);移动窗口到指定坐标
4.window.moveBy(0,10);按一定像素改变窗口的位置
移动窗口时,窗口尺寸不变
最大化主窗口
实例:function maximizeWindow()
{window.moveTo(0,0);window.resizeTo(screen.availWidth,screen.availHeight);}
注意:XP真正最大化窗口并没有定位在(0,0)点。其实窗口的左上角位于(-4,-4)。没有真正最大化窗口的方法,也没有最小化窗口的实现方法。