如何从IE和Chrome浏览器中的显示模式对话框窗口返回数组对象

How to return array object from showmodaldialog window in IE and Chrome browser?

本文关键字:对话框 模式 显示 窗口 返回 对象 数组 IE 浏览器 Chrome      更新时间:2023-09-26

从 showmodaldialog window.returnValue 在 Firefox 中,我得到了数组对象,但在 IE 和 Chrome 中出现错误。

function doYes() {
    var val=[];
    val.push("A");
    val.push("B");
    window.returnValue =val;
}

甚至数组也可以在Firefox中工作,而不是在IE9中。请参阅框中showModalDialog段代码。

function doYes() {
    var val={};
    val.x="A";
    val.y="B";
    window.returnValue =val;
}

这也适用于Firefox而不是IE9。

自Chrome37以来,showModalDialog已经过时了。如果您使用的是较旧的Chrome,请阅读此SO答案。

在IE11中:如果对话框的返回值是数组或对象,则无法访问其原型中的属性。例如,这会导致alert(modal_return_value)失败并触发SCRIPT5011 Can't execute code from a freed script错误(alert在原型中使用toString()方法(。

不知何故,这甚至是可以理解的,因为原型实际上位于一个窗口中,该窗口在您访问这些属性之前已关闭。我不确定这是IE11中的错误还是预期功能,但无论哪种方式都很烦人。

不过,您可以访问返回对象自己的属性。例如,您可以使用 for 循环遍历数组,甚至可以alert(modal_return_value[n])

或者你可以从返回值创建一个新数组,如下所示:

var arr = showModalDialog('returnsArray.htm');
if (!arr) {/* Dialog cancelled, do something */}
arr = Array.prototype.splice.call(arr, 0);

在最后一行中,我们借用splice方法Array.prototype并从返回的数组创建一个新数组。