JavaScript窗口功能指南之檢查一個窗口是否存在 (轉)
JavaScript窗口功能指南之檢查一個窗口是否存在 (轉)[@more@]Javascript窗口功能指南之檢查一個窗口是否存在
(作者:聽風編譯 2001年01月19日 11:35)
當你創建一個新窗口時,給open()方法的返回值分配一個變量非常重要。比如,下面的語句創建一個新窗口,然后立即關閉它:
win = window.open("http://www.docjs.com/", "js");
win.close();
Window對象 每一個瀏覽器窗口都與一個清楚地window對象對應,所以,當你想引用當前窗口時,你應該使用window對象。下面的語句設置當前窗口的URL:
window.location.;
當你在腳本程序中放置這樣一個語句時,你不需要指定window對象,因為當前窗口的存在是默認的:
location.;
注意,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 "屬性" 現在你知道了瀏覽器實際創建了新窗口。但是它仍然存在嗎?不是必須的。你需要確認可用的窗口的確擁有一個真正的window對象。既然每個window對象對應于一個open()方法,你就可以通過webreference.com/js/column6/object.html" target=_blank>對象探測檢查到這個方法:
// 如果win.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 屬性 由于Javascript的第一個版本,瀏覽器窗口成為一個非常困難的問題。比如,一個window對象的一些方法,例如close(),即使當窗口已經關閉時也能被執行,同時另外一些卻不能(比如moveTo())。但是情況會更糟。Inte.NET Explorer和Navigator經常有不同的行為。而且,預測一定操作的結果經常是非常困難的,即使你以前已經做過類似的嘗試。我們將告訴你如何克服這些困難,方法就是介紹一個在交叉瀏覽器中能應用的語句,它將檢查一個給定的窗口是否被打開。
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)。