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

來源:互聯網
上載者:User
當你建立一個新視窗時,給open()方法的傳回值分配一個變數非常重要。比如,下面的語句建立一個新視窗,然後立即關閉它:

  win = window.open("http://www.docjs.com/", "js");

  win.close();

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

  window.location.href = "http://www.docjs.com/";

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

  location.href = "http://www.docjs.com/";

  注意,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()方法,你就可以通過對象探測檢查到這個方法:
  // 如果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())。但是情況會更糟。Internet 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)。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.