使用window.open()方法既可以導(dǎo)航到一個特定的URL,也可以打開一個新的瀏覽器窗口。這個方法可以接收4個參數(shù):要加載的URL、窗口目標(biāo)、一個特性字符串以及一個表示新頁面是否取代瀏覽器歷史記錄中當(dāng)前加載頁面的布爾值。通常只須傳遞第一個參數(shù),最后一個參數(shù)只在不打開新窗口的情況下使用。
如果為window.open()傳遞了第二個參數(shù),而且該參數(shù)是已有窗口或框架的名稱,那么就會在具有該名稱的窗口或框架中加載第一個參數(shù)指定的URL??聪旅娴睦樱?
//等同于
window.open("http://m.gimmickmag.com/", topFrame");
調(diào)用這行代碼,就如同用戶單擊了href屬性為http://m.gimmickmag.com/,target屬性為"topFrame"的鏈接。如果有一個名叫"topFrame"的窗口或者框架,就會在該窗口或框架加載這個URL;否則,就會創(chuàng)建一個新窗口并將其命名為"topFrame"。此外,第二個參數(shù)也可以是下列任何一個特殊的窗口名稱:_self、_parent、_top或blank。
彈出窗口
如果給window.open()傳遞的第二個參數(shù)并不是一個已經(jīng)存在的窗口或框架,那么該方法就會根據(jù)在第三個參數(shù)位置上傳人的字符串創(chuàng)建一個新窗口或新標(biāo)簽頁。如果沒有傳入第三個參數(shù),那么就會打開一個帶有全部默認(rèn)設(shè)置(工具欄、地址欄和狀態(tài)欄等)的新瀏覽器窗口(或者打開一個新標(biāo)簽頁——根據(jù)瀏覽器設(shè)置)。在不打開新窗口的情況下,會忽略第三個參數(shù)。
第三個參數(shù)是一個逗號分隔的設(shè)置字符串,表示在新窗口中都顯示哪些特性。下表列出了可以出現(xiàn)在這個字符串中的設(shè)置選項。
fullscreen yes或no表示瀏覽器是否最大化.僅I限E.
height 數(shù)值表示新窗口的高度,不能小于100.
left 數(shù)值表示新窗口的左坐標(biāo),不能是負(fù)值
location ?yes或no ?表示是否在瀏覽器窗口中顯示地址欄,不同瀏覽器的默認(rèn)值不同.
menuber ?yes或no ?表示是否在瀏覽器窗口中顯示菜單欄,默認(rèn)值為no.
resizable ?yes或no ?表示是否可以通過拖動瀏覽器窗口的邊框改變其大小,默認(rèn)值為no
scrollbars ?yes或no ?表示如果內(nèi)容在視口中顯示不下,是否允許滾動.默認(rèn)值為no
status ?yes或no ?表示是否在瀏覽器窗口中顯示狀態(tài)欄,默認(rèn)值為no
toolbar ?yes或no ?表示是否在瀏覽器窗口中顯示工具欄。默認(rèn)值為no
top ?數(shù)值 ?表示新窗口的上坐標(biāo)。不能是負(fù)值
width ?數(shù)值 ?表示新窗口的寬度。不能小于100
表中所列的部分或全部設(shè)置選項,都可以通過逗號分隔的名值對列表來指定。其中,名值對以等號表示(注意,整個特性字符串中不允許出現(xiàn)空格),如下面的例子所示:
window.open("http://m.gimmickmag.com/","jxbhWindow", "height=400, width=400,top=10, left=10, resizable=yes");
這行代碼會打開一個新的可以調(diào)整大小的窗口,窗口初始大小為400×400像素,并且距屏幕上沿和左邊各10像素。
window.open()方法會返回一個指向新窗口的引用。引用的對象與其他window對象大致相似, 但我們可以對其進行更多控制。南昌網(wǎng)站設(shè)計公司工程師多年的工作經(jīng)驗總結(jié),有些瀏覽器在默認(rèn)情況下可能不允許我們針對主瀏覽器窗口調(diào)整大小或移動位置,但卻允許我們針對通過window.open()創(chuàng)建的窗口調(diào)整大小或移動位置。通過這個返回的對象,可以像操作其他窗口一樣操作新打開的窗口,如下所示:
var jxbhWin=window.open("http://m.gimmickmag.com/","jxbhWindow", "height=400, width=400, top=10, left=10, resizable=yes");
//調(diào)整大小
jxbhWin.resizeTo( 500, 00);
//移動位置
jxbhWin .moveTo (100,100);
調(diào)用close()方法還可以關(guān)閉新打開的窗口:
jxbhWin.close();
但是,這個方法僅適用于通過window.open()打開的彈出窗口。南昌建網(wǎng)站公司技術(shù)人員認(rèn)為,對于瀏覽器的主窗口,如果沒有得到用戶的允許是不能關(guān)閉它的。不過,彈出窗口倒是可以調(diào)用top.close()在不經(jīng)用戶允許的情況下關(guān)閉自己。彈出窗口關(guān)閉之后,窗口的引用仍然還在,但除了像下面這樣檢測其closed屬性之外,已經(jīng)沒有其他用處了:
jxbhWin.close();
alert (jxbhWin.closed); //true
新創(chuàng)建的window對象有一個opener屬性,其中保存著打開它的原始窗口對象。這個屬性只在彈 出窗口中的最外層window對象(top)中有定義,而且指向調(diào)用window.open()的窗口或框架。例如:
var jxbhWin=window.open("http://m.gimmickmag.com/","jxbhWindow", "height=400, width=400, top=10, left=10, resizable=yes");
雖然彈出窗口中有一個指針指向打開它的原始窗口,但原始窗口中并沒有這樣的指針指向彈出窗口。窗口并不跟蹤記錄它們打開的彈出窗口,南昌網(wǎng)絡(luò)公司技術(shù)員提示,因此我們只能在必要的時候自己來手動實現(xiàn)跟蹤。
有些瀏覽器(如IE8和Chrome)會在獨立的進程中運行每個標(biāo)簽頁。當(dāng)一個標(biāo)簽頁打開另一個標(biāo)簽頁時,如果兩個window對象之間需要彼此通信,那么新標(biāo)簽頁就不能運行在獨立的進程中。在Chrome中,將新創(chuàng)建的標(biāo)簽頁的opener屬性設(shè)置為null,即表示在單獨的進程中運行新標(biāo)簽頁,如下所示:
var jxbhWin=window.open("http://m.gimmickmag.com/","jxbhWindow", "height=400,width=400,top=10, left=10, resizable=yes");
將opener屬性設(shè)置為null就是告訴瀏覽器新創(chuàng)建的標(biāo)簽頁不需要與打開它的標(biāo)簽頁通信,因此可以在獨立的進程中運行。標(biāo)簽頁之間的聯(lián)系一旦切斷,將沒有辦法恢復(fù)。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://m.gimmickmag.com 如轉(zhuǎn)載請注明出處!