溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript窗口功能指南之檢查一個(gè)窗口是否存在 (轉(zhuǎn))

發(fā)布時(shí)間:2020-08-10 18:43:22 來(lái)源:ITPUB博客 閱讀:220 作者:a400 欄目:編程語(yǔ)言
JavaScript窗口功能指南之檢查一個(gè)窗口是否存在 (轉(zhuǎn))[@more@]Javascript窗口功能指南之檢查一個(gè)窗口是否存在
(作者:聽(tīng)風(fēng)編譯 2001年01月19日 11:35)

  當(dāng)你創(chuàng)建一個(gè)新窗口時(shí),給open()方法的返回值分配一個(gè)變量非常重要。比如,下面的語(yǔ)句創(chuàng)建一個(gè)新窗口,然后立即關(guān)閉它:

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

  win.close();

Window對(duì)象
  每一個(gè)瀏覽器窗口都與一個(gè)清楚地window對(duì)象對(duì)應(yīng),所以,當(dāng)你想引用當(dāng)前窗口時(shí),你應(yīng)該使用window對(duì)象。下面的語(yǔ)句設(shè)置當(dāng)前窗口的URL:

  window.location.;

  當(dāng)你在腳本程序中放置這樣一個(gè)語(yǔ)句時(shí),你不需要指定window對(duì)象,因?yàn)楫?dāng)前窗口的存在是默認(rèn)的:

  location.;

  注意,self等價(jià)于window,所以,self.close()實(shí)際上就等于window.close()。

  當(dāng)你想操縱一個(gè)窗口時(shí),你必須確認(rèn)它是存在的。在為window.open()方法定義一個(gè)變量時(shí),要將它定義為全局變量并設(shè)置為null。記住,open()方法返回新窗口的window對(duì)象。這里是一個(gè)例子:

  var win = null;

  function launchWindow() {

   win = window.open();

   // statements that refer to the new window go here

  }

  如果你想對(duì)新窗口執(zhí)行一個(gè)操作,你首先應(yīng)該檢查變量win是否為null:

  // if win exists, move the window

  if (win) win.moveTo(0, 0);

  注意,null等于false,同時(shí)任何其他合法的對(duì)象等價(jià)于true。如果win等于true,你就知道了它不是null,這意味著新窗口成功地創(chuàng)建了。

open "屬性"
現(xiàn)在你知道了瀏覽器實(shí)際創(chuàng)建了新窗口。但是它仍然存在嗎?不是必須的。你需要確認(rèn)可用的窗口的確擁有一個(gè)真正的window對(duì)象。既然每個(gè)window對(duì)象對(duì)應(yīng)于一個(gè)open()方法,你就可以通過(guò)webreference.com/js/column6/object.html" target=_blank>對(duì)象探測(cè)檢查到這個(gè)方法:
  // 如果win.open存在,就移動(dòng)窗口

  if (win.open) win.moveTo(0, 0);

  變量win對(duì)照窗口的window對(duì)象,所以win.open對(duì)應(yīng)window的window.open方法。注意,條件表達(dá)式是一個(gè)函數(shù)引用,不是一個(gè)函數(shù)調(diào)用。除非你確認(rèn)win存在,你不應(yīng)該試圖估計(jì)win.open。下面的語(yǔ)句描述了正確的執(zhí)行方法:

  // if win and win.open exist, move the window

  if (win && win.open) win.moveTo(0, 0);

  由于&&是一個(gè)短操作符號(hào),如果第一個(gè)參數(shù)(win)對(duì)應(yīng)于true,那么結(jié)果就取決于第二個(gè)數(shù)值。如果第二個(gè)參數(shù)是false,那么整個(gè)表達(dá)式結(jié)果就是false。這是一個(gè)很重要的行為,因?yàn)槿绻鹷in不存在,那么表達(dá)式win.open就會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

closed 屬性
  由于Javascript的第一個(gè)版本,瀏覽器窗口成為一個(gè)非常困難的問(wèn)題。比如,一個(gè)window對(duì)象的一些方法,例如close(),即使當(dāng)窗口已經(jīng)關(guān)閉時(shí)也能被執(zhí)行,同時(shí)另外一些卻不能(比如moveTo())。但是情況會(huì)更糟。Inte.NET Explorer和Navigator經(jīng)常有不同的行為。而且,預(yù)測(cè)一定操作的結(jié)果經(jīng)常是非常困難的,即使你以前已經(jīng)做過(guò)類(lèi)似的嘗試。我們將告訴你如何克服這些困難,方法就是介紹一個(gè)在交叉瀏覽器中能應(yīng)用的語(yǔ)句,它將檢查一個(gè)給定的窗口是否被打開(kāi)。

  window.closed屬性是一個(gè)Boolean型數(shù)值,它定義了是否窗口已經(jīng)被關(guān)閉。當(dāng)窗口被關(guān)閉時(shí),window對(duì)象依然存在,并且它的closed屬性已經(jīng)被設(shè)置為true。

  使用closed來(lái)判斷打開(kāi)的窗口以及仍能夠被引用(從window.open方法返回的數(shù)值)的窗口是否仍然打開(kāi)著。當(dāng)窗口關(guān)閉時(shí),你不應(yīng)該試圖再操縱它。因?yàn)閣indow.closed僅僅被Internet Explorer 4、Navigator 3 和高版本所支持,所以你應(yīng)該注意前面的版本問(wèn)題。我們將使用下面的代碼:

  // 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型表達(dá)式中等價(jià)于false (就像其他不存在地屬性一樣,比如 window.tomershiran)。



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI