JavaScript窗口功能指南之检查一个窗口是否存在 (作者:听风编译 2001年01月19日 11:35) 当你创建一个新窗口时,给open()方法的返回值分配一个变量非常重要。比如,下面的语句创建一个新窗口,然后立即关闭它: win = window.open("http://www.docjs.com/", "js"); win.close(); Window对象 window.location.href = "http://www.docjs.com/"; 当你在脚本程序中放置这样一个语句时,你不需要指定window对象,因为当前窗口的存在是默认的: location.href = "http://www.docjs.com/"; 注意,self等价于window,所以,self.close()实际上就等于window.close()。 当你想操纵一个窗口时,你必须确认它是存在的。在为window.open()方法定义一个变量时,要将它定义为全局变量并设置为null。记住,open()方法返回新窗口的window对象。这里是一个例子: var win = null; function launchWindow() { win = window.open(); // statements that refer to the new window go here } 如果你想对新窗口执行一个操作,你首先应该检查变量win是否为null: // if win exists, move the window if (win) win.moveTo(0, 0); 注意,null等于false,同时任何其他合法的对象等价于true。如果win等于true,你就知道了它不是null,这意味着新窗口成功地创建了。 open "属性" if (win.open) win.moveTo(0, 0); 变量win对照窗口的window对象,所以win.open对应window的window.open方法。注意,条件表达式是一个函数引用,不是一个函数调用。除非你确认win存在,你不应该试图估计win.open。下面的语句描述了正确的执行方法: // if win and win.open exist, move the window if (win && win.open) win.moveTo(0, 0); 由于&&是一个短操作符号,如果第一个参数(win)对应于true,那么结果就取决于第二个数值。如果第二个参数是false,那么整个表达式结果就是false。这是一个很重要的行为,因为如果win不存在,那么表达式win.open就会产生一个错误。 closed 属性 window.closed属性是一个Boolean型数值,它定义了是否窗口已经被关闭。当窗口被关闭时,window对象依然存在,并且它的closed属性已经被设置为true。 使用closed来判断打开的窗口以及仍能够被引用(从window.open方法返回的数值)的窗口是否仍然打开着。当窗口关闭时,你不应该试图再操纵它。因为window.closed仅仅被Internet Explorer 4、Navigator 3 和高版本所支持,所以你应该注意前面的版本问题。我们将使用下面的代码: // if win and win.open exist, and win.closed isn't true, move the window if (win && win.open && !win.closed) win.moveTo(0, 0); Internet Explorer 3 和 Navigator 2 不支持 closed 方法,所以它在Boolean型表达式中等价于false (就像其他不存在地属性一样,比如 window.tomershiran)。 |