最近在做一個項目,需要用到彈出一個子窗口(sub.jsp)顯示一些信息,然後在sub.jsp中需要調用父窗口(main.jsp)裏的js方法,同時在打開了sub.jsp以後,整個瀏覽器窗口中最前面的頁面是sub.jsp。
開始想到的方法是用showModalDialog()來打開一個新的窗口,這樣打開sub.jsp頁面時該頁面就在最前面,在我本機上通過IE(IE7.0)瀏覽器是能在sub.jsp裏調用main.jsp裏方法的。但是當我把程序部署到客戶服務器上,通過客戶瀏覽器打開sub.jsp頁面時可以讓其在最前面,但是點擊調用main.jsp中方法時會出錯(重新彈出一個窗口),而客戶的瀏覽器是IE6版本的。最後實在沒有辦法只能考慮用window.open()來實現該功能,這個時候就需要解決的問題是讓window.open()打開的頁面在最前面,上網查找了一些資料,提到的解決方法如下:
var newWin = window.open('sub.jsp','newWin','height=200,width=400,top=200,left=200,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no,status=no'); window.onfocus=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.onfocus=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.onclick=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.ondblclick=function (){ if(newWin && !newWin.closed){ newWin.focus(); } };
通過測試,以上方法並不能真正解決讓sub.jsp保持在最前面。
後來,想了個辦法,在sub.jsp頁面中,添加如下代碼:
<body onblur="focus();">
這樣可以讓window.open()打開的頁面保持在最前面。