首页 > 技术文章 > 关于chrome等浏览器不支持showModalDialog的解决方案

bo10296 2015-03-07 11:25 原文

目前,新版本的chrome和opera、Firefox等浏览器已经不支持showModalDialog方法。

如果是没有接收返回值的,可以直接将window.showModalDialog改为window.open。

 

需要接收返回值的情况:

父页面设置:

var uIdName;
function chooseuser_m() {
var num = Math.random();
var str = "" + document.getElementById('wfUserIDs').value + "";
try {
    uIdName = window.showModalDialog("../../Choose/ChooseUser.aspx?tmp=" + num + "&rqstr=" + str + "", "window", "dialogWidth:650px;DialogHeight=520px;status:no;scroll=no;help:no");
    var arr = uIdName.split("|");
    for (var i = 0; i < arr.length; i++) {
        document.getElementById("wfUserIDs").value = arr[0];
        document.getElementById("wfUserNames").value = arr[1];
      }
    }
catch (e) {
     window.open("../../Choose/ChooseUser.aspx?tmp=" + num + "&rqstr=" + str + "", "window", "dialogWidth:650px;DialogHeight=520px;status:no;scroll=no;help:no");
    }
}

这里先将原来的方法改成window.open,接下来是子页面的设置:

    function sendFromChild() {
            if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0)) {
                window.returnValue = chkSelect(); //chkSelect()获取一组数据
            }
            else {
                chkSelectChrome();
            }
            window.close();
        }

        //for chrome 2015-03-07
        function chkSelectChrome() {
            var uIdName = chkSelect();
            var arr = uIdName.split("|");
            for (var i = 0; i < arr.length; i++) {
                opener.document.all.wfUserIDs.value = arr[0]; //wfUserIDs
                opener.document.all.wfUserNames.value = arr[1];
            }
        }

这里只判断非IE下的方法,在chrome下测试通过,其他非IE浏览器没有测试。

opener.document.all.IDName.value //直接对父窗体赋值 ID必须对应 否则报错

window.showModalDialog与window.open所带的参数可以是一样的,弹出的窗口不会改变

推荐阅读