各浏览器对 window.open() 的窗口特征 sFeatures 参数支持程度存在差异
标准参考
无。
问题描述
使用 window.open 方法可以弹出一个新窗口,其中 open 方法的 sFeatures 参数选项在各浏览器中支持程度不一,这有可能导致同样的代码使各浏览器中弹出窗口形式产生巨大差异。
造成的影响
会造成不同浏览器中打开的窗口位置、尺寸出现差异;以及是否有地址栏、菜单栏、状态栏、滚动条和是否全屏等表现形式存在出入。
受影响的浏览器
所有浏览器 |
---|
问题分析
open 方法属于 window 对象,他用来打开一个新浏览器窗口, 其中window 对象又隶属 BOM (Browser Object Model) 范畴。遗憾的是 BOM 还没有被标准化,它由各个浏览器厂商制定,因此会出现实差异。
时至今日,HTML5 规范草案中已经开始标准化 BOM,window 对象也在草案之中,草案中对 open 方法的形参数 window.open([ url [,target[,features[,replace]]]])
做了简要列举与介绍。但是在讲到 features 时仅写着"该参数功能说明忽略",具体参数功能尚不可知。
在可查找到的浏览器厂商官方 developer 站点中, 仅有 mozilla MDC 以及 micorsoft MSDN 写有对 open 方法 features 参数说明的。其中,MDC 介绍非常简洁,仅说明参数格式,而 MSDN 中 采用了详细的参数格式和可选键值对说明,对于选项值以及选项的默认值本文将不再罗列,读者可以参看下方的 MSDN 文档说明。
Firefox 中 window.open 方法的详细说明请参看 MDC :window.open
IE 中 window.open 方法的详细说明请参看 MSDN :open Method
本文中将采用 MSDN 中列举的 features 参数选项作为评测标准,并构造以下测试代码:
<script>
function openW3C(sFeatures){
window.open("http://www.w3.org/","",sFeatures,false);
}
</script>
<h2>请在各浏览器内依次点击下列按键,根据显示效果来判断 window.open 方法是否支持某项特性设定。</h2> channelmode sFeatures: <button onclick="openW3C('channelmode=no')">channelmode=no</button>
<button onclick="openW3C('channelmode=no')">channelmode=yes</button><br /> directories sFeatures:<button onclick="openW3C('directories=no')">directories=no</button>
<button onclick="openW3C('directories=yes')">directories=yes</button><br /> fullscreen sFeatures:<button onclick="openW3C('fullscreen=no')">fullscreen=no</button>
<button onclick="openW3C('fullscreen=yes')">fullscreen=yes</button><br /> location sFeatures:<button onclick="openW3C('location=no')">location=no</button>
<button onclick="openW3C('location=yes')">location=yes</button><br /> menubar sFeatures:<button onclick="openW3C('menubar=no')">menubar=no</button>
<button onclick="openW3C('menubar=yes')">menubar=yes</button><br /> resizable sFeatures:<button onclick="openW3C('resizable=no')">resizable=no</button>
<button onclick="openW3C('resizable=yes')">resizable=yes</button><br /> scrollbars sFeatures:<button onclick="openW3C('scrollbars=no')">scrollbars=no</button>
<button onclick="openW3C('scrollbars=yes')">scrollbars=yes</button><br /> status sFeatures:<button onclick="openW3C('status=no')">status=no</button>
<button onclick="openW3C('status=yes')">status=yes</button><br /> titlebar sFeatures:<button onclick="openW3C('titlebar=no')">titlebar=no</button>
<button onclick="openW3C('titlebar=yes')">titlebar=yes</button><br /> toolbar sFeatures:<button onclick="openW3C('toolbar=no')">toolbar=no</button>
<button onclick="openW3C('toolbar=yes')">toolbar=yes</button><br /> top sFeatures:<button onclick="openW3C('top=10')">top=10</button><br /> left sFeatures:<button onclick="openW3C('left=10')">left=10</button><br /> width sFeatures:<button onclick="openW3C('width=100')">width=100</button><br /> height sFeatures:<button onclick="openW3C('height=100')">height=100</button><br /> top and left sFeatures:<button onclick="openW3C('top=20,left=20')">top and left is 20</button><br /> width and height sFeatures:<button onclick="openW3C('width=100,height=100')">width and height is 100</button><br /> top and left and width and height sFeatures:<button onclick="openW3C('top=200,left=200,width=200,height=200')">top and left and width and height is 200</button>
由于各浏览器有不同的弹出窗口自动处理机制,为了不影响测试准确性,在运行测试代码之前因将所有浏览设置为可以打开弹出窗口。
各浏览器运行结果汇总:
IE6 | IE7 | IE8 | Firefox | Safari | Chrome | Opera | |
---|---|---|---|---|---|---|---|
channelmode | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
directories | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
fullscreen | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
location | 支持 | 支持 | 支持 | 不支持7 | 支持2 | 不支持7 | 支持8 |
menubar | 支持 | 支持1 | 支持1 | 支持1 | 支持1 | 不支持9 | 不支持9 |
resizable | 支持 | 支持 | 支持 | 不支持10 | 不支持10 | 不支持10 | 不支持10 |
scrollbars | 支持 | 支持 | 支持 | 支持 | 不支持11 | 不支持11 | 支持 |
status | 支持 | 支持12 | 支持 | 不支持13 | 支持 | 不支持13 | 不支持13 |
titlebar | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
toolbar | 支持 | 支持 | 支持 | 支持 | 支持2 | 不支持14 | 不支持14 |
top | 支持3 | 支持1 | 支持3 | 支持4 | 支持4 | 不支持5 | 不支持5 |
left | 支持3 | 支持1 | 支持3 | 支持4 | 支持4 | 不支持5 | 不支持5 |
width | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持6 | 支持 |
height | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持6 | 支持 |
top left | 支持3 | 支持4 | 支持3 | 支持4 | 支持4 | 不支持5 | 不支持5 |
width height | 支持 | 支持 | 支持 | 支持 | 支持4 | 支持1 | 支持 |
top left width height | 支持 | 支持4 | 支持3 | 支持4 | 支持4 | 支持3 | 支持4 |
上表中为各个浏览器对 features 各参数选项的支持程度,其中需要特殊说明的如下:
- 【标注1】:IE7 IE8 Firefox Chrome Safari 中,当 "menubar" 选项为 "yes" 时,默认不显示菜单栏,需要按 ALT 键后菜单栏才可显示;相反当 "menubar" 选项为 "no" 时,即使按了 ALT 键也不会显示菜单栏。
- 【标注2】:Safari 中,开启 "location" 选项与开启 "toolbar" 选项时显示效果一致。
- 【标注3】:IE6 IE8 Chrome 中,使用 "top" 和 "left" 定位,如果出现设定的的坐标值过大,弹出窗口将可能显示在屏幕可视范围外。
- 【标注4】:IE7 Firefox Safari Opera 中,使用 "top" 和 "left" 定位,如果出现设定的的坐标值过大,窗口会自动调整 "top" 与 "left" 值,确保窗口正常显示在屏幕可视区域内。
- 【标注5】:Chrome Opera 中,不支持在没有设定 "width" 与 "height" 值的情况下独立使用 "left" 和 "top",此时 "left" "top" 设定值均不生效。
- 【标注6】:Chrome 中,不支持在没有设定 "left" 和 "height" 值的情况下独立使用 "width" 与 "height",此时 "width" "height" 设定值均不生效。结合【标注5】说明可知,在 Chrome 中弹出窗口不论想要设定宽高或位置中的一个或几个值,都必须将他们全部赋值,否则都将不起作用。
- 【标注7】:Firefox Chrome 中,地址栏会始终显示。
- 【标注8】:Opera 中,地址栏默认不显示,但可以点击页面最上方横条使他显示出来,设置 "location=yes" 后地址栏会自动显示出来。
- 【标注9】:Chrome Opera 中,不论 "menubar" 值如何设置,永远不显示菜单栏。
- 【标注10】:Firefox Safari Chrome Opera 中,无论 "resizable"值如何设置,窗口永远可由用户调整大小。
- 【标注11】:Safari Chrome 中,在页面存在滚动条的情况下,无论 "scrollbars"值如何设置,滚动条始终可见。
- 【标注12】:IE7 在 Windows XP SP3 系统中默认可以支持 "status " 参数隐藏状态栏;而在 Windows Vista 系统默认环境下不支持 "status " 参数,状态栏始终可见。这与两个系统中默认的 IE7 小版本号不同有关,前者版本号较低,后者版本号较高。
- 【标注13】:Firefox 中,无论 "status" 值如何设置,状态栏始终可见,而 Chrome Opera 中,则与前者相反,状态栏始终不可见。
- 【标注14】: Chrome Opera 中,无论 "toolbar" 值如何设置,始终不显示工具栏。
综上所述,可见 window.open 方法的 sFeatures 参数支持程度存在巨大差异,使用时须谨慎为之。
解决方案
建议在使用 window.open 方法的 sFeatures 参数时,推荐如下配置字符串,可确保所有浏览器表现基本一致:
" top=nInt,left=nInt,width=nInt,height=nInt,location=yes,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no
"
原文:http://www.w3help.org/zh-cn/causes/BX1053
各浏览器对 window.open() 的窗口特征 sFeatures 参数支持程度存在差异的更多相关文章
- 打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口。 语法: window.open([URL], [窗口名称], [参数字符串])
打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...
- JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...
- Example001使用window对象打开窗口
<!--实例001使用window对象打开窗口--> <script> <!--使用window对象打开窗口的语法格式如下--> <!--window.ope ...
- 浏览器事件window.onload、o…
原文地址:浏览器事件window.onload.onfocus.onblur.onscroll和resize作者:lilyxiao <html> <head> <titl ...
- [转载]浏览器事件window.onload、onfocus、onblur、ons
原文地址:浏览器事件window.onload.onfocus.onblur.onscroll和resize作者:lilyxiao <html> <head> <titl ...
- 浏览器拦截js打开新窗口
最近做项目时,遇到的问题"想通过javascript在浏览器新标签页或新窗口打开一个新的页面,结果被浏览器大大无情给拦截了"业务需求:前端提交数据到后端,后端返回url,然后在新窗 ...
- js-DOM ~ 04. BOM:浏览器对象模型window. 、定时器、在线用户、祝愿墙、BOM的内置方法内置对象
multiple. select列表多选 触发事件后调用有参数的函数要先创建一个函数,然后在函数内调用执行函数 Array.from(伪数组):伪数组变为真数组 indexOf():查询字符的索引 a ...
- nw.js FrameLess Window下的窗口拖拽与窗口大小控制
nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候,我们觉得系统的Frame框很难看,于是想自定义. 自定义Frame的第一步是在package.config文件中将fr ...
- chrome浏览器插件window resizer调试webapp页面大小
chrome浏览器插件window resizer可以调整当前浏览器分辨率大小 可以自定义大小,以适合于andorid和iphone设备
随机推荐
- [C#]中英文字幕合并的小程序
今天班里小组合作录了一个视频,我给它做了字幕的时间轴.为了让这个视频假装很高端的样子,我想再加上英文的字幕.中文的纯字幕文本先搞成一句一行,然后放到Google翻译上,复制英文保存在Eng.txt. ...
- ASP.NET MVC 项目分离
ASP.NET MVC 项目分离 说明: ZRT.Web 是前台网站,目录[D:\ZRT.Web\] ZRT.Admin 是后台管理,目录[D:\ZRT.Web\Applications\Admin\ ...
- JAVA泛型-擦除
package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...
- C++的类型萃取技术
应该说,迭代器就是一种智能指针,因此,它也就拥有了一般指针的所有特点——能够对其进行*和->操作.但是在遍历容器的时候,不可避免的要对遍历的容器内部有所了解,所以,设计一个迭代器也就自然而然的变 ...
- MFC 动态创建控件
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一 ...
- HDU 5828 Rikka with Sequence(线段树)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5828 [题目大意] 给出一个数列,要求支持区间加法,区间开方和区间和查询操作. [题解] 考虑开方 ...
- HDU 3507 Print Article(CDQ分治+分治DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3507 [题目大意] 将长度为n的数列分段,最小化每段和的平方和. [题解] 根据题目很容易得到dp ...
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...
- 315M无线发射模块天线的长度计算
波长=光速/频率=300/315=0.952米 1/4波长须要的天线长度=波长*1/4=0.952/4=0.238米 考虑导线传播高频信号的缩短率在0.98左右,因此天线长度=0.238*0.98=0 ...
- oracle execute immediate
declare aa ,); l_cnt ); i_yr ; i_curCode ) :='001'; i_vDate date := ...