如何在IE和Chrome浏览器中从showmodaldialog窗口返回数组对象?

时间:2014-12-20 11:58:45

标签: javascript internet-explorer showmodaldialog

从Firefox中的showmodaldialog window.returnValue我得到数组对象,但在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。

1 个答案:

答案 0 :(得分:1)

自Chrome37以来,showModalDialog has been obsoleted。如果您使用较旧的Chrome,请阅读this SO answer

在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的{​​{1}}方法,并从返回的数组中创建了一个新数组。