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);

    open "屬性"
   

現在你知道了瀏覽器實際建立了新視窗,但是它仍然存在嗎?你需要確認可用的視窗的確擁有一個真正的windo

w對象。既然每個window對象對應於一個open()方法,你就可以通過對象探測檢查到這個方法:
  // 如果win.open存在,就移動視窗
  if(win.open) win.moveTo(0, 0);

  注意,條件運算式是一個函數引用,不是一個函數調用;還有,除非你確認win存在,你不應該試圖估計wi

n.open。下面的語句描述了正確的執行方法:
  // if win and win.open exist, move the window
  if(win && win.open) win.moveTo(0, 0);

  由於&&是一個短操作符號,如果第一個參數(win)對應於true,那麼結果就取決於第二個數值。如果第二

個參數是false,那麼整個運算式結果就是false。這是一個很重要的行為,因為如果win不存在,那麼運算式wi

n.open就會產生一個錯誤。

    closed 屬性
  一個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.