TheuseofshowModalDialogmodaldialogboxandbrowsercompatibility

1.modaldialog是什么
showModalDialog是对jswindow对象的方法,如window.open,打开新的一页。
不同的是:当showModalDialog打开子窗口的父窗口,不能获得焦点(即无法操作)。
父窗口可以得到回报。通过设置在子窗口的window.returnvalue价值

2。一个例子
1)主窗口main.html,
2)在主窗口中showModalDialog方式打开的子窗口sub.html
3)在子窗口中设置返回值返回主窗口

main.html
复制代码代码如下所示:





Functionshowmodal()
{
varret = window.showmodaldialog(sub.htmltemp =+ Math.random());
警报(subreturnvalueis+ RET);
}






sub.html
复制代码代码如下所示:





FunctionreturnMain()
{
窗口。中=returnfromsub ;
Window.close();
}






特别是,当在main.html的showModalDialog方法,使用Math.random()的目的是为了避免缓存。

3.showmodaldialog详细
vreturnvalue = window.showmodaldialog(surl {,} { varguments,sfeatures })
surl
所需的参数类型:字符串。用于指定要在对话框中显示的文档的URL。
varguments
可选参数,类型:变种。它是用来传递参数对话框,参数传递,类型包括数组,等对话框获取通过window.dialogarguments参数。
sfeatures
可选参数,类型:字符串。要描述对话框的外观,如信息,可以使用下面的一个或几个,用分号分隔。
该dialogheight对话框的高度不小于100px。在IE4的dialogheight和dialogwidth默认单位是em,而IE5是PX。为了方便起见,在定义模态对话框时,它使用PX做单元。
该dialogwidth宽度:对话框。
dialogleft:从桌面左边的距离。
从dialogtop距离:到桌面。
中心:{是|没有| 1 | 0 }:如果窗口是在中间,这是默认的,但仍然可以指定高度和宽度。
帮助:{是|没有| 1 | 0 }:帮助按钮是否显示,默认是。
调整大小:{是|没有| 1 | 0 } IE5:是否可改变大小。默认号
现状:{是|没有| 1 | 0 } { IE5 + }:状态栏是否显示,默认是{ }或{ }没有非模态模态。
滚动:{是|没有| 1 | 0 |在|了}:指示对话框显示滚动条,默认是。

其他几个属性用于HTA和一般不用于一般的网页。
dialoghide:{是|没有| 1 | 0 | | }:在关闭对话框是否隐藏在预览打印或印刷。默认是否定的。
优势:{ }:沉没的|提出指定对话框的边框样式,默认了。
缦:{是|没有| 1 | 0 |在|了}:默认是否定的。

4。浏览器的兼容性
但并不是所有浏览器都兼容这种用法。
在Chrome运行上面的例子时,父窗口可以任意为焦点,window.open相同,并且得到的returnvale也未定义。
以下是主流浏览器对这种方法的支持。




浏览器
不支持
状态

IE9
二千零三


firefox13.0
二千零三


safari5.1
二千零三


chrome19.0
*
它不是一个模态对话框,而是一种新的开放形式。

opera12.0
*
发生了什么事,连窗户都不玩

如果有来电varguments此参数窗口:
复制代码代码如下所示:
VaR RET = window.showmodaldialog(sub.htmltemp =+ Math.random(),窗口);

在子窗口中,以下值是:




浏览器
模态对话框
window.opener
window.dialogarguments
指定

IE9
二千零三
未定义
{对象窗口}
二千零三

firefox13.0
二千零三
{ objectwindow }
{对象窗口}
二千零三

safari5.1
二千零三
{ objectwindow }
{对象窗口}
二千零三

chrome19.0
*
{ objectwindow }
未定义
*

值得注意的是,火狐浏览器下,如果子窗体刷新,这window.dialogarguments将失去的和未定义的。在上面的结果我们可以看到,则返回值是未定义的,Chrome浏览器的回报,还有在其他浏览器没有问题。

5。如何解决铬的兼容性问题。
方向:设置窗口。揭幕战中= 。
main.html
复制代码代码如下所示:





showmodal()函数
{
VaR RET = window.showmodaldialog(sub.htmltemp =+ Math.random(),窗口);
用于铬
如果(未定义)
{
window.returnvalue ret =;
}
警报(子返回值是);
}






sub.html
复制代码代码如下所示:





returnmain()函数
{
如果(window.opener!=未定义)
{
window.opener.returnvalue =回子;
其他{ }
window.returnvalue =回子;
}
Window.close();
}






这里要确定是否定义了一些对象来区分浏览器。当然,您还可以判断浏览器的类型。

这里是父窗口的值使用,如果父窗口的值也可以其他方式作其他用途,如:
var属性的旧值= window.returnvalue;
VaR风险价值= showModalDialog()
window.returnvalue =属性的旧值

6。需要特别注意的是,Chrome下的测试需要将HTML文件放入Web服务器(Tomcat,…)以便通过HTTP访问测试,否则就不会成功。