最近在做一个项目,需要用到弹出一个子窗口(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.οnfοcus=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.οnfοcus=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.οnclick=function (){ if(newWin && !newWin.closed){ newWin.focus(); } }; window.document.οndblclick=function (){ if(newWin && !newWin.closed){ newWin.focus(); } };
通过测试,以上方法并不能真正解决让sub.jsp保持在最前面。
后来,想了个办法,在sub.jsp页面中,添加如下代码:
<body οnblur="focus();">
这样可以让window.open()打开的页面保持在最前面。