window.showModelessDialog方法比window.open方法弹出的窗口不同的是弹出的窗口是模态的,这样必须关闭子窗口后才能操作父窗口.遗憾的是只有IE的支持,下面的方法能让FireFox"支持"模态窗口弹出
这种方法的灵感来自于上面的CuteEditor,弹出的窗口是模态的,在FF下是在window上写一个click方法,只要点击父窗口就调用子窗口的focus()方法,这样看上去就是"模态"的了
通过上面的改造,showModelessDialog显得好用多了,兼容了两种浏览器.
源代码就不提供下载了,都贴出来了
这种方法的灵感来自于上面的CuteEditor,弹出的窗口是模态的,在FF下是在window上写一个click方法,只要点击父窗口就调用子窗口的focus()方法,这样看上去就是"模态"的了
var userAgent = navigator.userAgent.toLowerCase();
var isFireFox=/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
if(isFireFox)
{
window.showModelessDialog=function (url)
{
var windowName=(arguments[1]==null?"":arguments[1].toString());
var feature=(arguments[2]==null?"":arguments[2].toString());
var OpenedWindow=window.open(url,windowName,feature);
window.addEventListener('click',function (){OpenedWindow.focus();},false);
return OpenedWindow;
}
}
else
{
//子窗口中调用父窗口
//IE中用window.parent.document
//FF中用window.opener.document
//下面的代码将 作用于IE '重载' window.showModelessDialog 方法 统一用 window.opener访问父窗口
var originFn=window.showModelessDialog;
window.showModelessDialog=function (url)
{
var OpenedWindow= originFn(url,arguments[1],arguments[2]);
OpenedWindow.opener=window;
}
}
function popW()
{
var OpenedWindow=window.showModelessDialog('popWindow2.html','','width=400,height=400');
}
说破了其实很简单,只是在下面的重写IE中的showModelessDialog方法就有点技巧了,originFn竟然可以"记住"原有的showModelessDialog方法,并且能这样调用,在我的试探中都有些吃惊.var isFireFox=/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
if(isFireFox)
{
window.showModelessDialog=function (url)
{
var windowName=(arguments[1]==null?"":arguments[1].toString());
var feature=(arguments[2]==null?"":arguments[2].toString());
var OpenedWindow=window.open(url,windowName,feature);
window.addEventListener('click',function (){OpenedWindow.focus();},false);
return OpenedWindow;
}
}
else
{
//子窗口中调用父窗口
//IE中用window.parent.document
//FF中用window.opener.document
//下面的代码将 作用于IE '重载' window.showModelessDialog 方法 统一用 window.opener访问父窗口
var originFn=window.showModelessDialog;
window.showModelessDialog=function (url)
{
var OpenedWindow= originFn(url,arguments[1],arguments[2]);
OpenedWindow.opener=window;
}
}
function popW()
{
var OpenedWindow=window.showModelessDialog('popWindow2.html','','width=400,height=400');
}
通过上面的改造,showModelessDialog显得好用多了,兼容了两种浏览器.
源代码就不提供下载了,都贴出来了