JavaScript視窗功能指南之檢查一個視窗是否存在 (轉)

a400發表於2007-08-13
JavaScript視窗功能指南之檢查一個視窗是否存在 (轉)[@more@]script視窗功能指南之檢查一個視窗是否存在
(作者:聽風編譯 2001年01月19日 11:35)

  當你建立一個新視窗時,給open()方法的返回值分配一個變數非常重要。比如,下面的語句建立一個新視窗,然後立即關閉它:

  win = window.open("", "js");

  win.close();

Window
  每一個視窗都與一個清楚地window物件對應,所以,當你想引用當前視窗時,你應該使用window物件。下面的語句設定當前視窗的URL:

  window.location.href = "";

  當你在指令碼中放置這樣一個語句時,你不需要指定window物件,因為當前視窗的存在是預設的:

  location.href = "";

  注意,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()方法,你就可以透過reference.com/js/column6/.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 屬性
  由於的第一個版本,瀏覽器視窗成為一個非常困難的問題。比如,一個window物件的一些方法,例如close(),即使當視窗已經關閉時也能被執行,同時另外一些卻不能(比如moveTo())。但是情況會更糟。Inte 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)。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-953602/,如需轉載,請註明出處,否則將追究法律責任。

相關文章