1,基本描述
oNewWindow = window.open( sURL , sName , sFeatures, bReplace)
window.open在打開一個窗口(其url為sURL)后,將返回一個代表該窗口對象的一個變量oNewWindow,如果打開不成功,則oNewWindow的值為null。同時為了對打開的窗口預先做一些控制,提供了其他一些參數(sName、sFeatures、bReplace)可供選擇配置,下面將具體說明每個參數的含義
* oNewWindow:被打開的窗口的對象
* sUrl:被打開窗口的url
* sName:在哪個窗口打開新的url鏈接,例如可以為_blank(新窗口)、_top(最外層窗口)等等
* sFeatures:對窗口的一些控制屬性
o fullscreen:是否為全屏模式(相當於F11的效果),可取值:yes/1、no/0
o directories:是否帶有目錄按鈕(例如收藏夾中的’鏈接’目錄),可取值同上
o location:是否帶有地址欄,可取值同上
o channelmode:是否為影院模式,可取值同上
o menubar:是否帶有菜單條,可取值同上
o resizable:是否可以改變窗口的尺寸,可取值同上
o scrollbars:是否帶有滾動條,可取值同上
o status:是否帶有狀態欄,可取值同上
o titlebar:是否帶有標題欄,可取值同上
o toolbar:是否帶有快捷工具欄,可取值同上
o height:窗口高度
o width:窗口寬度
o top:距屏幕上邊緣的距離
o left:距屏幕左邊緣的距離
* bReplace:如果在同一窗口打開新窗口,該值用於指定是否在history中替換原窗口的url鏈接,可取值:true/false
2,基本使用
在一個新窗口中打開某個鏈接link(/myoa/admin/manage.jsp)
window.open ( “/myoa/admin/manage.jsp” ) 或者 window.open ( “/myoa/admin/manage.jsp” , “_blank” ) ;
注意:這樣的話,每次執行都會打開一個新窗口,即使上次打開的新窗口未關閉,仍然會彈出新的
在指定的某個窗口中打開某個鏈接link(/myoa/admin/manage.jsp)
window.open ( “/myoa/admin/manage.jsp” , “myWiddown” ) ; //myWindow即為窗口的名稱
注意:如果myWindow窗口不存在,那么將會新彈出一個窗口,並將新窗口命名為myWindow,只要該窗口不關閉,那么以后執行該open,彈出窗口均為這個已經存在的myWindow
另外,有一些窗口名稱已經被瀏覽器使用,具有特殊的含義,例如:_blank、_top、_parent、_self等
打開一個新窗口,要求窗口高度300px、寬度500px、不帶滾動條、不帶地址欄(/myoa/admin/manage.jsp)
window.open ( “/myoa/admin/manage.jsp” , “_blank” ,“height=300,width=500,scrollbars=no,location=no” ) ;
注意:sFeatures這些參數之間是用逗號分隔的,而在window.showModalDialog中,是用分號進行分隔的,一定要注意!
3,高級部分
原窗口與彈出窗口之間的對象定位
概述:彈出窗口是我們在頁面編程中經常使用的一種方式,從互動角度分析,彈出窗口主要有兩種類型,一種是信息顯示窗口,例如人員信息、文章信息等等;另外一種是繼續處理窗口,例如有些項目中,新建文章就是彈出窗口來完成的。對於信息顯示窗口,用戶看完之后關閉就可以了,但是對於繼續處理窗口,在用戶繼續處理之后,往往需要與原窗口進行互動,例如當在新窗口中創建一篇文章提交后,希望在彈出窗口關閉的同時,原窗口能夠刷新等等。
解決方式:上面方式的一個關鍵就是,如何獲取原窗口與彈出窗口對象,在DOM模型中我們可以明確的看到:
原窗口中獲取彈出窗口對象:var infoWindow=window.open ( “create.jsp” , “_blank” , “width=500,height=400″ ) ;//infoWindow即代表了彈出窗口的window對象,例如在彈出窗口中有一個表單(myForm)和表單中的一個輸入控件 (username),我們可以這樣操作:infoWindow.document.myForm.username.value=“lisi”;
彈出窗口中獲取原窗口對象:如上例,在create.jsp中,我們可以如下操作來刷新原窗口opener.location.reload () ;//opener是DOM中提供的一個默認對象,表示的就是某個窗口的原窗口。
window.open的緩存處理
概述:如果window.open鏈接的target指定的是一個已經存在了的窗口,尤其是原頁面中的一個frame和iframe的話,此時 window.open打開的鏈接頁面將不會從服務器重新請求,而是使用瀏覽器中相應的緩存頁面,至少ie給人的感覺就是這樣的.
例如:
<input type=“button” value=“顯示列表” onclick=“window.open(’/myoa/users/list.jsp’,'main’,”)” />
<iframe name=“main” src= “/myoa/users/list.jsp” width= “100%” height= “600″ frameborder="0″ ></iframe>
第一次訪問該頁面是可以看到一個列表,那么此時即使新創建一條記錄,那么再點擊“顯示列表”按鈕時,會發現列表沒有發生變化,此時關閉瀏覽器重新進行發現列表出現了剛創建的那條記錄,可見緩存起了作用。
解決辦法:實驗中我們發現,中導向鏈接不會發生上面的現象,每次都是重新請求,同樣是上面的例子,使用下面的方式就是可以的:
<a href= “/myoa/users/list.jsp” target= “main” >顯示列表</a>
<iframe name= “main” src= “/myoa/users/list.jsp” width= “100%” height= “600″ frameborder=“0″ ></iframe>
不過有許多時候,我們不得不使用window.open到本頁面某個iframe的方式,那么可以這樣解決:
<input type=”button” value=”顯示列表” onclick=”document.getElementById(’showlist’).click()”/>
<a href=”/myoa/users/list.jsp” target=”main” id=”showlist” style=”display:none”>顯示列表</a>
<iframe name=”main” src=”/myoa/users/list.jsp” width=”100%” height=”600″ frameborder=”0″></iframe>
