如何使 window.showmodaldialog 在 chrome 37 中工作?

2023-11-30

我们有一个巨大的网络应用程序,我们使用window.showmodaldialog用于警报、确认和弹出窗口。自 Chrome 版本 37 起,此调用已被禁用。

有什么快速解决方法吗window.showmodaldialog在最新版本的 Chrome 中工作吗?

我在这里添加了 window.showmodaldialog 的解决方法,尽管这不是一个完美的解决方法,因为这不会像 showmodaldialog 那样破坏代码执行,而是会打开弹出窗口。

window.showModalDialog = function (url, arg, feature) {
        var opFeature = feature.split(";");
       var featuresArray = new Array()
        if (document.all) {
           for (var i = 0; i < opFeature.length - 1; i++) {
                var f = opFeature[i].split("=");
               featuresArray[f[0]] = f[1];
            }
       }
        else {

            for (var i = 0; i < opFeature.length - 1; i++) {
                var f = opFeature[i].split(":");
               featuresArray[f[0].toString().trim().toLowerCase()] = f[1].toString().trim();
            }
       }



       var h = "200px", w = "400px", l = "100px", t = "100px", r = "yes", c = "yes", s = "no";
       if (featuresArray["dialogheight"]) h = featuresArray["dialogheight"];
        if (featuresArray["dialogwidth"]) w = featuresArray["dialogwidth"];
       if (featuresArray["dialogleft"]) l = featuresArray["dialogleft"];
        if (featuresArray["dialogtop"]) t = featuresArray["dialogtop"];
        if (featuresArray["resizable"]) r = featuresArray["resizable"];
       if (featuresArray["center"]) c = featuresArray["center"];
      if (featuresArray["status"]) s = featuresArray["status"];
        var modelFeature = "height = " + h + ",width = " + w + ",left=" + l + ",top=" + t + ",model=yes,alwaysRaised=yes" + ",resizable= " + r + ",celter=" + c + ",status=" + s;

        var model = window.open(url, "", modelFeature, null);

       model.dialogArguments = arg;

    }

只需将此代码放在页面的头部即可。


我将以下 javascript 放入页面标题中,它似乎可以工作。它检测浏览器何时不支持 showModalDialog,并附加一个使用 window.open 的自定义方法,解析对话框规格(高度、宽度、滚动等)、以 opener 为中心并将焦点设置回窗口(如果焦点丢失) )。此外,它使用 URL 作为窗口名称,这样就不会每次都打开一个新窗口。如果您将窗口参数传递给模式,您将需要编写一些额外的代码来解决这个问题。弹出窗口不是模态的,但至少您不必更改大量代码。可能需要根据您的情况做一些工作。

<script type="text/javascript">
  // fix for deprecated method in Chrome 37
  if (!window.showModalDialog) {
     window.showModalDialog = function (arg1, arg2, arg3) {

        var w;
        var h;
        var resizable = "no";
        var scroll = "no";
        var status = "no";

        // get the modal specs
        var mdattrs = arg3.split(";");
        for (i = 0; i < mdattrs.length; i++) {
           var mdattr = mdattrs[i].split(":");

           var n = mdattr[0];
           var v = mdattr[1];
           if (n) { n = n.trim().toLowerCase(); }
           if (v) { v = v.trim().toLowerCase(); }

           if (n == "dialogheight") {
              h = v.replace("px", "");
           } else if (n == "dialogwidth") {
              w = v.replace("px", "");
           } else if (n == "resizable") {
              resizable = v;
           } else if (n == "scroll") {
              scroll = v;
           } else if (n == "status") {
              status = v;
           }
        }

        var left = window.screenX + (window.outerWidth / 2) - (w / 2);
        var top = window.screenY + (window.outerHeight / 2) - (h / 2);
        var targetWin = window.open(arg1, arg1, 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
        targetWin.focus();
     };
  }
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 window.showmodaldialog 在 chrome 37 中工作? 的相关文章

随机推荐

  • 如何知道安装何时完成

    我正在创建一个应用程序来安装从服务器下载的应用程序 我想安装这些应用程序 下载文件后 我用于安装的方法的代码位于此处 public void Install String name prompts user to accept any in
  • 这段代码中 malloc 做了什么?

    你能解释一下下面的代码吗 str char malloc sizeof char num 1 什么是malloc在这里做什么 Why is num 1 used malloc是一个函数在堆上分配一块内存并返回一个pointer到它 它类似于
  • jQuery .append() 函数

    Why this mydiv append ul mydiv append li Hello li mydiv append ul alert mydiv html produces ul ul li Hello li and not ul
  • 理解类变量的继承

    我正在建造一个Challenge24SolverJava 中的类 逻辑本身起作用并找到预期的解决方案 具有任意数量的参数 无论如何 这部分项目正在按我的预期进行 这个问题来自于解决方案的表示问题 可以公平地说 我已经用 Python 完成了
  • 如果用户喜欢该页面,则signedRequest不会返回

    您好 我正在使用 facebook sdk php 版本 开发一个 fb 应用程序 但由于某种原因 signedRequest 没有返回我喜欢的变量以确定用户是否喜欢该页面 以下是signedrequest的print r Array id
  • 如何在 TypeScript 中定义一种类型,该类型可以具有除特定属性之外的任何属性?

    当编写像商店这样的字典的接口时 我想区分数据模型和商店中的项目 即id和模型 我想添加模型本身不使用字段的约束id在他们的界面中 但我不知道该怎么做 type Item
  • 将 Joomla 安装在子目录中

    你们中有些人可能知道 Wordpress 在设置中有一个选项 允许将站点安装在子目录中 同时将站点 URL 设为主域 它类似于 站点 url 和 Wordpress url 我正在 Joomla 中寻找类似的东西 我知道它没有内置选项 但如
  • Azure 存储队列和多个 WebJobs 实例:QueueTrigger 是否会在触发时设置消息租用时间?

    场景 生产者发送一条消息到Storage Queue 一个WebJobs在QueueTrigger上处理该消息 每条消息只能处理一次 可以有多个WebJob实例 我一直在谷歌搜索 根据我读到的内容 我需要编写处理消息的函数 使其具有幂等性
  • Webbrowser,检测是否安装了PDF阅读器?

    有没有办法检查用户是否安装了PDF阅读器 也许使用 ActiveX 组件 请你帮助我好吗 您可以使用以下命令检测已安装的插件window navigator plugins这将返回一个包含已安装插件详细信息的数组 但这不适用于 Intern
  • 使用 Clang 与全局模板变量重复符号

    我有这三个文件 foo h pragma once template
  • 具有CurrencyFormat 和PropertyChanged 触发器的TextBox 不接受正确的文本

    我有一个TextBox在绑定到类型窗口的依赖属性的 WPF 窗口中double 见下文 每当用户输入TextBox when The TextBox为空 或者 全部文字都被选中 键入的文本被错误地接受 例如 如果我在这两种情况下键入 5 则
  • 在获取请求中显示不同的结果,按属性分组并计算该属性的总数

    设想 我有一个费用跟踪 iOS 应用程序 并且有一个名为 DashBoardViewController 的视图控制器 表视图控制器 带 FRC 它基本上可以对给定一周 一个月或一年的费用 收入进行分类 并将其显示为节标题例如标题 2012
  • 如何使方法的返回对象通用?

    我需要执行类似下面的代码的操作 但是 new T 不起作用 它说 无法创建变量类型 T 的实例 因为它没有 new 约束 public static T MapToBaseDropDown2
  • 如何启动电子邮件客户端,然后使用 Javascript 进行页面重定向?

    我需要使网站在其他浏览器上的功能与 IE6 中的功能完全相同 当前代码的一部分类似于以下内容 在 IE 中 这会导致邮件客户端打开并准备好指定的消息 然后将浏览器重定向到 newPage html 然而 其他浏览器仅重定向到 newPage
  • 在 R 中对数据进行分类

    我试图根据数据类型将我的数据分类为不同的组 我的数据和代码如下 bank ROE bank1 0 73 bank2 0 94 bank3 0 62 bank4 0 57 bank5 0 31 bank6 0 53 bank7 0 39 ba
  • 归并排序最有效的实现

    所以我想知道 Java 中合并排序最有效的实现是什么 如果它的时间效率会根据语言而变化 这个问题可能很微不足道 但我的最终目标是向更有经验的程序员学习 这是我做的两个例子 version I made public static doubl
  • 如何通过循环将数据分组到同一标题下

    我正在尝试从两个连接表中获取数据 从一个表中我收集列表标题 从第二个表中我收集列表数据 型号代码 function view searching type items this gt db gt select searching type
  • ios 8 swift - 如何使用单独的数据源为表格视图添加页脚

    这两天我一直在努力解决这个问题 我只想将页脚 自定义单元格 添加到我的表格视图中 我有一个视图 上面有一些东西 标签 按钮 并且我添加了一个表格视图 为了拥有一个干净的控制器 对于数据源 我使用一个单独的文件 class MyDataSou
  • 解释以下C++方法[重复]

    这个问题在这里已经有答案了 define XL 33 define OR 113 define NOR 313 define TN 344 int to bits int critn char mask unsigned int x int
  • 如何使 window.showmodaldialog 在 chrome 37 中工作?

    我们有一个巨大的网络应用程序 我们使用window showmodaldialog用于警报 确认和弹出窗口 自 Chrome 版本 37 起 此调用已被禁用 有什么快速解决方法吗window showmodaldialog在最新版本的 Ch