(作者:聽風編譯 2001年01月19日 11:35)
當你創建了一個新窗口時,將open()方法的返回值分配給一個變量非常重要。比如,下面的語句就是創建一個新窗口,然後立即關閉它:
win = window.open("http://www.docjs.com/", "js");
win.close();
每一個瀏覽器窗口都清楚地與一個window對象對應,所以,當你想引用當前窗口時,你應該使用window對象。下面的語句設置當前窗口的URL:
window.location.href = "http://www.docjs.com/";
當你在腳本程序中放置這樣一個語句時,你不需要指定window對象,因爲當前窗口的存在是默認的:
location.href = "http://www.docjs.com/";
注意,self等價於window,所以,self.close()實際上就等於window.close()。
window.location.href = "http://www.docjs.com/";
關閉窗口
window.close()關閉指定的瀏覽器窗口。如果不帶窗口引用調用close()函數,JavaScript就關閉當前窗口。在事件處理程序中,你必須指定window.close(),而不能僅僅使用close()。由於JavaScript總靜態對象的作用範圍,不帶對象名字的close()調用等價於document.close()。
如果你執行close()方法去關閉一個不是由腳本程序打開的窗口,就會出現一個確認對話框讓用戶選擇是否關閉窗口。如果在歷史列表中只有當前一個記錄,那麼在Navigator中就不會出現對話框。然而,如果你使用close()退出最後運行的瀏覽器實例,確認對話框就會出現。看看下面在2類瀏覽器中出現的對話框樣子:
點擊下面的鏈接打開一個新窗口,其中內容是tryclose.html:
Launch Window (with JavaScript)
Launch Window (with HTML)
第1個鏈接使用JavaScript的window.open()方法來打開一個窗口,第2個鏈接簡單地使用TARGET屬性實現同樣目的:
<A HREF="javascript:void(window.open('tryclose.html'))">Launch Window (with JavaScript)</A><BR>
<A HREF="tryclose.html" TARGET="_blank">Launch Window (with HTML)</A>
頁面tryclose.html顯示一個按鈕,它負責執行window.close()方法:
<FORM><INPUT TYPE="button" VALUE="Close Window" onClick="window.close()"></FORM>
當你點擊第1個鏈接打開新窗口後,瀏覽器就“記住”了它是由一個腳本程序生成的。所以,當你點擊按鈕時,新窗口不用再確認操作就被關閉。第2個鏈接是另外一回事了,它不使用任何JavaScript打開一個新窗口,當你點擊按鈕時,Internet Explorer將顯示一個確認對話框。然而,Navigator立即關閉這個窗口,因爲,新窗口在會話歷史中沒有任何文檔。
JavaScript允許你在其他的窗口使用一段腳本程序關閉另外一個窗口。
點擊後關閉的窗口
許多標準的應用程序都有一個About對話框,當用戶在其中任何地方點擊一次鼠標時,窗口就被關閉。下面就對窗口使用JavaScript來實現同樣的效果。首先,請看看打開新窗口的代碼:
<SCRIPT LANGUAGE="JavaScript">
<!--
function launchAbout() {
about = window.open("about.html", "about", "height=75,width=250");
return false;
}
// -->
</SCRIPT>
<A HREF="about.html" onClick="return launchAbout()">About</A>
點擊鏈接後,生成一個新窗口。然後,你可以在其中點擊任何地方,就關閉那個窗口。在文件about.html的HEAD區域,添加下面的腳本程序:
<SCRIPT LANGUAGE="JavaScript">
<!--
function closeWin() {
window.close();
}
if (window.Event) document.captureEvents(Event.ONCLICK);
document.onclick = closeWin;
// -->
</SCRIPT>
依賴性窗口
窗口的依賴性特徵定義了是否窗口應該是一個當前窗口的依賴性子窗口。依賴窗口就是當它的父窗口關閉時,它也隨即關閉。dependent特徵僅僅在Navigator 4和以上版本被支持。然而,我們可以使用一小段JavaScript程序來處理交叉瀏覽器。讓我們使用下面的函數來打開一個依賴性窗口:
function openDep() {
win = window.open("depwin.html", "dep", "height=200,width=400");
}
如果當前窗口關閉時,或者調入一個新的URL時,我們將使用onUnload事件處理程序來關閉依賴性窗口:
<BODY onUnload="closeDep()">
注意,當前文檔被卸載時,新窗口將關閉,即使當前窗口仍然打開。下面是closeDep()函數的代碼:
function closeDep() {
if (win && win.open && !win.closed) win.close();
}
注意,在試圖關閉前,我們必須檢查窗口是否存在。