最近大量地用到了模式窗口,也遇到了不少问题,特总结于此,方便自己日后查阅,若能帮到他人,那就更好了。
一、基本使用
语法:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
参数说明:
sURL:指定对话框要显示的URL。
vArguments:向对话框传递参数,对话框通过window.dialogArguments来取得传递进来的参数(推荐传window,方便控制父窗口)。
sFeatures:描述对话框的外观等信息(dialogHeight;dialogWidth;dialogLeft;dialogTop;center;help;resizable;status;scroll;)
示例:
var sUrl = 'page0.aspx';
window.showModalDialog(sUrl, window, "dialogWidth:400px;dialogHeight:400px;status:0;help:0;resizable:0;center:1;");
二、控制父窗口
定义模式窗口时,设定 window 为对话框参数,则在该窗口中,可通过window.dialogArguments来控制父窗口的一切元素。
示例:
oParent.location.reload(); //父窗口刷新,当然还可以做其他操作
三、传值
子窗口传值给父窗口,父窗口可以根据子窗口返回值做相应处理。与上面的方式相比,更推荐这种方式。避免出现你操作我,我操作你的混乱局面。子窗口你要做什么,你告诉父窗口我,我做给你,而不是你直接来碰我的东西。
var val = window.showModalDialog('这里省略所有参数'); //打开子窗口,接收返回值
if (val=="刷新"){ //按子窗口返回信息,做相应处理
window.location.reload();
}
<!--子窗口内的代码-->
window.returnValue = "刷新"; //可以是字符、对象等js支持的任意数据类型
window.close(); //关闭窗口
四、提交表单会打开新窗口的问题
在<head>内加入以下代码
五、缓存问题
方式1、打开的URL后加一个随机参数,避免缓存;
window.showModalDialog(sUrl, window, "dialogWidth:400px;dialogHeight:400px;status:0;help:0;resizable:0;center:1;");
方式2、设定页面不缓存,在<head>中加入以下代码
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
六、Session丢失问题
模式窗口A中open一个新窗口B,某些环境下,窗口B会丢失Session。解决方法是通过调用窗口A的父窗口的open来打开窗口B。
var oWin = (typeof(window.dialogArguments) == "object") ? window.dialogArguments : window;
oWin.open(sUrl);
本文详细介绍了模式窗口的基本使用方法,包括如何控制父窗口、如何在父子窗口间传递参数等内容,并给出了具体的示例代码。
113

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



