當你建立了一個新視窗時,將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();
}
注意,在試圖關閉前,我們必須檢查視窗是否存在。