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

标签 javascript jquery asp.net google-chrome cross-browser

我们有一个巨大的 Web 应用程序,我们使用 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>

关于javascript - 如何使 window.showmodaldialog 在 chrome 37 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738442/

相关文章:

c# - Asp.net Core rc2 web api文件上传

asp.net - 无法 Glimpse 在远程 IIS 上工作

javascript - 为什么我能够以不同的方式导入我的 JS?

javascript - 是否可以在javascript函数中传递这个

javascript - 如何计算工资中的税

javascript - 合并然后排序 2 个 feed

javascript - 如何在一页中使用两个范围 slider ?

c# - 页面重定向到上一页?

javascript - 页面刷新后,Ajax POST 到 Flask 不起作用

javascript - Fabric.js 基于svg的多重裁剪