最近在做一个项目,需要用到弹出一个子窗口(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()打开的页面保持在最前面。
本文介绍了一种确保使用window.open()方法打开的子窗口(sub.jsp)始终处于浏览器窗口最前端的技术方案。通过在子窗口中添加特定的<body>属性,可以有效解决IE6等旧版浏览器中子窗口无法保持在最前的问题。
866

被折叠的 条评论
为什么被折叠?



