1、open() 方法
使用 window 对象的 open() 方法,可以打开一个新窗口,该方法的返回值为新建的 window 对象,使用这个 window 对象可以引用新建的窗口。用法如下:
window.open(URL,name,features,replace);
//参数说明如下:
//URL:可选字符串,声明在新窗口中显示文档的URL。如果忽略,或者为空,则新窗口就不会显示任何文档。
//name:可选字符床,声明新窗口的名称。这个名称可以做标记<a>和<form>的属性 target 的值。
// 如果该参数指定了一个已经存在的窗口,那么open()方法就不会再创建一个新窗口,而只是返回一个指定窗口的引用。
// 这种情况下,features 参数将被忽略。
//features:可选字符串,声明了新窗口要显示的标准浏览器的特征。如果忽略该参数,新窗口将具有所有标准特征
//replace:可选的布尔值,规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新项目,还是替换浏览器历史中的当前条目。
特征 | 说明 |
channelmode = yes | no | 1 | 0 | 是否使用剧院模式显示窗口。默认为no。 |
directories = yes | no | 1 | 0 | 是否添加目录按钮。默认为yes。 |
fullscreen = yes | no | 1 | 0 | 是否使用全屏模式显示浏览器。默认是no。处于全屏模式的窗口必须同时处于剧院模式。 |
height = pixels | 窗口文档显示区的高度。以像素计。 |
left = pixels | 窗口的x坐标。以像素计。 |
location = yes | no | 1 | 0 | 是否显示地址字段。默认是yes。 |
menubar = yes | no | 1 | 0 | 是否显示菜单栏。默认是yes。 |
resizable = yes | no | 1 | 0 | 窗口是否可调节尺寸。默认是yes。 |
scrollbars = yes | no | 1 | 0 | 是否显示滚动条。默认是yes。 |
status = yes | no | 1 | 0 | 是否添加状态栏。默认是yes。 |
titlebar = yes | no | 1 | 0 | 是否显示标题栏。默认是yes。 |
toolbar = yes | no | 1 | 0 | 是否显示浏览器的工具栏。默认是yes。 |
top = pixels | 窗口的y坐标。 |
width = pixels | 窗口的文档显示区的宽度。以像素计。 |
新建的 window 对象拥有一个 opener 属性,它保存着打开它的原始窗口对象。opener 只在弹出窗口的最外层 window 对象中定义,而且指向调用 window.open() 方法的窗口或框架。
下面例子演示打开窗口和原窗口之间的关系。
myWindow = window.open(); //打开新的空白窗口
myWindow.document.write("<h1>这是新打开的窗口</h1>"); //在新的窗口中输出提示信息
myWindow.opener.document.write("<h1>这是原来的窗口</h1>"); //在原窗口中输出提示信息
alert(myWindow.opener == window); //检测window.opener属性值,返回true
虽然弹出窗口由一个指针(opener)指向打开它的窗口,但是原始窗口中并没有这样的指针指向弹出窗口。窗口并不跟踪已打开的弹出窗口,因此必要时只能手动实现跟踪。
有些浏览器(如Chrome)会在独立的进程中运行每个标签页。当一个标签页打开另一个标签页时,如果两个 window 对象之间需要通信,那么新标签页就不能运行在独立的进程中。在 Chrome 中将新建的标签页的 opener 属性设置为 null,即表示在单独的进程中运行新的标签页,代码如下:
myWindow = window.open();
myWindow.opener = null;
将 opener 属性设置为 null,这样新建的标签页就无法余打开它的标签页通信。标签页之间的联系一旦切断,将无法恢复。
2、close() 方法
使用 window 对象的 close() 方法可以关闭一个窗口。例如:要关闭一个新建的 w 窗口,可以使用下面的方法来完成。
w.close();
//如果在打开窗口内部关闭自身窗口,则应该使用如下方法完成
window.close();
使用 window.closed 属性可以检测当前窗口是否关闭,如果关闭则返回 true,否则返回 false。
下面例子演示了如何自动弹出一个新窗口,然后设置一段时间之后自动关闭该窗口,同时允许用户单机页面超链接,更换弹出窗口内显示的网页 URL。
var url = "http://www.baidu.com";
var features = "height=500,width=500,top=100,left=100,toolbar=no,menubar=no,scrollbars=no,resizable=no"
document.write('<a href="http://www.baidu.com/" target="newW">切换到百度首页</a>');
var me = window.open(url,"newW",features);
setTimeout(function(){
if(me.closed){
alert("创建的窗口已关闭");
}else{
me.close();
}
},5000); //延迟5000毫秒自动关闭
很多浏览器会禁用 JavaScript 弹出窗口,如果在浏览器禁止的情况下,使用 open() 方法打开新窗口,将会抛出一个异常,说明打开窗口失败。为了避免此类问题,同时为了了解浏览器是否支持禁用弹窗行为,可以使用如下代码检测。
var error = false;
try{
var w = window.open("http://baidu.com/","_blank");
if(w == null){
error = true;
}
}catch(ex){
error = true
}
if(error){
alert("浏览器禁用弹出窗口");
}