跨浏览器显示模态对话框替换

Cross-browser showModalDialog Replacement

本文关键字:对话框 替换 模态 显示 浏览器      更新时间:2023-09-26

所以我们有一个内部 Web 应用程序,它是在 IE6 时代写回来的,我们正试图达到它可以跨浏览器(包括移动设备)工作的状态。我们使用的是 ASP.NET,代码隐藏是用 VB.NET 编写的。

不幸的是,该应用程序使用showModalDialog功能,该功能仅在Internet Explorer(以及Firefox中)中真正起作用。它还利用了这些弹出窗口中的window.returnValue,因此它期望的是,当调用PopUpWindow()时,javascript将阻止该语句并停止执行。大多数调用的形式是"var a = PopUpWindow(..)"。然后,当弹出窗口关闭时,它将恢复并将 a 设置为 returnValue,然后使用它。

看起来现在javascript并没有真正做阻塞函数调用,这使得寻找简单的跨浏览器替换的过程令人沮丧。我们有一个 javascript 文件,它包含在包含打开弹出窗口的功能的每个页面上。理想情况下,我们希望替换此文件中的此功能,并使其在整个应用程序中工作,而无需在有弹出窗口的每个页面上进行更改。

有什么可以帮助解决这个问题的,或者是否有替换这些类型的对话框弹出窗口的标准方法?我们正在考虑用jQuery对话框替换它们,但由于我们需要使用回调函数来获取returnValue,因此它不能作为直接替换。我感觉没有简单的方法可以做到这一点(因为我们的代码依赖于阻止 javascript),我们将不得不咬紧牙关,并使用弹出窗口对每个页面进行更改。

你可以使用我的showModalDialog polyfill,使用模态<dialog>元素,该元素适用于最新的Google Chrome。对于其他浏览器,可以使用<dialog>填充代码。