JavaScript窗口功能指南之檢查一個(gè)窗口是否存在 (轉(zhuǎn))
JavaScript窗口功能指南之檢查一個(gè)窗口是否存在 (轉(zhuǎn))[@more@]Javascript窗口功能指南之檢查一個(gè)窗口是否存在
(作者:聽(tīng)風(fēng)編譯 2001年01月19日 11:35)
當(dāng)你創(chuàng)建一個(gè)新窗口時(shí),給open()方法的返回值分配一個(gè)變量非常重要。比如,下面的語(yǔ)句創(chuàng)建一個(gè)新窗口,然后立即關(guān)閉它:
win = window.open("http://www.docjs.com/", "js");
win.close();
Window對(duì)象 每一個(gè)瀏覽器窗口都與一個(gè)清楚地window對(duì)象對(duì)應(yīng),所以,當(dāng)你想引用當(dāng)前窗口時(shí),你應(yīng)該使用window對(duì)象。下面的語(yǔ)句設(shè)置當(dāng)前窗口的URL:
window.location.;
當(dāng)你在腳本程序中放置這樣一個(gè)語(yǔ)句時(shí),你不需要指定window對(duì)象,因?yàn)楫?dāng)前窗口的存在是默認(rèn)的:
location.;
注意,self等價(jià)于window,所以,self.close()實(shí)際上就等于window.close()。
當(dāng)你想操縱一個(gè)窗口時(shí),你必須確認(rèn)它是存在的。在為window.open()方法定義一個(gè)變量時(shí),要將它定義為全局變量并設(shè)置為null。記住,open()方法返回新窗口的window對(duì)象。這里是一個(gè)例子:
var win = null;
function launchWindow() {
win = window.open();
// statements that refer to the new window go here
}
如果你想對(duì)新窗口執(zhí)行一個(gè)操作,你首先應(yīng)該檢查變量win是否為null:
// if win exists, move the window
if (win) win.moveTo(0, 0);
注意,null等于false,同時(shí)任何其他合法的對(duì)象等價(jià)于true。如果win等于true,你就知道了它不是null,這意味著新窗口成功地創(chuàng)建了。
open "屬性" 現(xiàn)在你知道了瀏覽器實(shí)際創(chuàng)建了新窗口。但是它仍然存在嗎?不是必須的。你需要確認(rèn)可用的窗口的確擁有一個(gè)真正的window對(duì)象。既然每個(gè)window對(duì)象對(duì)應(yīng)于一個(gè)open()方法,你就可以通過(guò)webreference.com/js/column6/object.html" target=_blank>對(duì)象探測(cè)檢查到這個(gè)方法:
// 如果win.open存在,就移動(dòng)窗口
if (win.open) win.moveTo(0, 0);
變量win對(duì)照窗口的window對(duì)象,所以win.open對(duì)應(yīng)window的window.open方法。注意,條件表達(dá)式是一個(gè)函數(shù)引用,不是一個(gè)函數(shù)調(diào)用。除非你確認(rèn)win存在,你不應(yīng)該試圖估計(jì)win.open。下面的語(yǔ)句描述了正確的執(zhí)行方法:
// if win and win.open exist, move the window
if (win && win.open) win.moveTo(0, 0);
由于&&是一個(gè)短操作符號(hào),如果第一個(gè)參數(shù)(win)對(duì)應(yīng)于true,那么結(jié)果就取決于第二個(gè)數(shù)值。如果第二個(gè)參數(shù)是false,那么整個(gè)表達(dá)式結(jié)果就是false。這是一個(gè)很重要的行為,因?yàn)槿绻鹷in不存在,那么表達(dá)式win.open就會(huì)產(chǎn)生一個(gè)錯(cuò)誤。
closed 屬性 由于Javascript的第一個(gè)版本,瀏覽器窗口成為一個(gè)非常困難的問(wèn)題。比如,一個(gè)window對(duì)象的一些方法,例如close(),即使當(dāng)窗口已經(jīng)關(guān)閉時(shí)也能被執(zhí)行,同時(shí)另外一些卻不能(比如moveTo())。但是情況會(huì)更糟。Inte.NET Explorer和Navigator經(jīng)常有不同的行為。而且,預(yù)測(cè)一定操作的結(jié)果經(jīng)常是非常困難的,即使你以前已經(jīng)做過(guò)類(lèi)似的嘗試。我們將告訴你如何克服這些困難,方法就是介紹一個(gè)在交叉瀏覽器中能應(yīng)用的語(yǔ)句,它將檢查一個(gè)給定的窗口是否被打開(kāi)。
window.closed屬性是一個(gè)Boolean型數(shù)值,它定義了是否窗口已經(jīng)被關(guān)閉。當(dāng)窗口被關(guān)閉時(shí),window對(duì)象依然存在,并且它的closed屬性已經(jīng)被設(shè)置為true。
使用closed來(lái)判斷打開(kāi)的窗口以及仍能夠被引用(從window.open方法返回的數(shù)值)的窗口是否仍然打開(kāi)著。當(dāng)窗口關(guān)閉時(shí),你不應(yīng)該試圖再操縱它。因?yàn)閣indow.closed僅僅被Internet Explorer 4、Navigator 3 和高版本所支持,所以你應(yīng)該注意前面的版本問(wèn)題。我們將使用下面的代碼:
// 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型表達(dá)式中等價(jià)于false (就像其他不存在地屬性一樣,比如 window.tomershiran)。