谷歌浏览器升级到 新版本后,window.showModalDialog这个窗口方法报错Uncaught TypeError: undefined is not a function
我把下面的js代码放到页面的header里,是可以解决问题的。它做了以下事情:当检测到浏览器不支持showModalDialog时,使用window.open重写了这个方法。在这个方法里将dialog的参数(height, width, scroll..)做了解析,将打开的窗体居中,并设置上焦点。此外为了防止打开多个重复窗体,这里拿url作为window的名字。
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();
};
}
ref:http://stackoverflow.com/questions/25663053/how-can-i-make-window-showmodaldialog-work-in-chrome-37