精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||||
发表时间:2012-03-09
标准参考模态对话框 和 非模态对话框 的概念来自于 GUI 程序,实际上这两种对话框仍然是窗口的一种。
window.showModalDialog 方法不是 W3C 规范中的方法,其最初由 IE4 引入,用来创建一个模态对话框,并在其中显示 HTML 页面。其格式为: vReturnValue = object.showModalDialog(sURL [, vArguments] [, sFeatures]) 三个参数分别为:对话框加载的 HTML 页面的 URL、传入对话框页面的参数,控制对话框展现效果的参数。 其中可在对话框页面中通过 document.arguments 获得 vArguments 传入的参数的内容。 在 Firefox 3 中,也实现了对 window.showModalDialog 方法,其调用方式与IE类似,只是有个别参数没有实现。 关于 showModalDialog 方法的详细信息,请参考 MSDN 及 Mozilla Developer Center 中的内容。 window.showModelessDialog 方法也不是 W3C 规范中的方法,其最初由 IE5 引入,用来创建一个非模态对话框,并在其中显示 HTML页面。其格式为: vReturnValue = object.showModelessDialog(sURL [, vArguments] [, sFeatures]) 使用方法与 showModalDialog 类似。 关于 showModelessDialog 方法的详细信息,请参考 MSDN 中的内容。 问题描述目前 Firefox 与 Safari 实现了与 IE 非常接近的 showModalDialog 方法,Chrome 中则是将其当做 window.open 方法处理,Opera 中暂时不支持此方法。 造成的影响若在脚本代码中使用了 showModalDialog 与 showModelessDialog 方法,则可能会导致运行效果不是预期效果,甚至可能导致代码报错。 受影响的浏览器
问题分析首先分析各浏览器对 showModalDialog 方法的支持情况。 分析以下代码: modaldialog.html <input type= "text " id= "textbox " value= "defaultValue " /><br /> <button id= "open1 ">Open ModalDialog</button> <script> var updatetext = " "; function update() { document.getElementById( "textbox ").value = updatetext; } document.getElementById( "open1 ").onclick = function () { window.showModalDialog( "inner.html ", window); } </script> inner.html <input type= "text " id= "dialogtext " /><button id= "ok ">OK!</button> <script> document.getElementById( "dialogtext ").value = window.dialogArguments.document.getElementById( "textbox ").value; document.getElementById( "ok ").onclick = function () { window.dialogArguments.updatetext = document.getElementById( "dialogtext ").value; window.dialogArguments.update(); window.close(); } </script> 上面代码中,modaldialog.html 使用 window.showModalDialog 方法创建模态对话框,载入 inner.html,并传入 modaldialog.html 页面的 window 对象。 这段代码在不同的浏览器环境中的表现如下:
可见,各浏览器的 window 对象中均包含 showModalDialog 方法,且均返回
下面分析各浏览器对 showModelessDialog 方法的支持情况。 modelessdialog.html <input type="text" id="textbox" value="defaultValue" /><br /> <button id="open1">Open ModelessDialog</button> <script> var updatetext = ""; function update() { document.getElementById("textbox").value = updatetext; } document.getElementById("open1").onclick = function () { window.showModelessDialog("inner.html", window); } </script> inner.html <input type="text" id="dialogtext" /><button id="ok" >OK!</button> <script> document.getElementById("dialogtext").value = window.dialogArguments.document.getElementById( "textbox").value; document.getElementById("ok").onclick = function () { window.dialogArguments.updatetext = document.getElementById("dialogtext").value; window.dialogArguments.update(); window.close(); } </script> 上面代码和上一段的类似,只不过将 showModalDialog 方法换成了 showModelessDialog 方法。 这段代码在不同的浏览器环境中的表现如下:
showModelessDialog 方法目前仅被 IE 支持,在其他浏览器中 window.showModelessDialog 均返回 "undefined " 。 解决方案showModalDialog 方法与 showModelessDialog 方法均不被 W3C 支持,虽然 showModalDialog 方法目前已比较广泛的被支持,但还是应避免使用它。因为模态对话框会阻塞父窗口的输入,使其是去焦点,这将对用户体验不利。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||||||
返回顶楼 | ||||||||||||||||||
浏览 2209 次