0

从 Firefox 中的 showmodaldialogwindow.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。

4

1 回答 1

1

从 Chrome37 开始,showModalDialog 已经过时了。如果您使用的是旧版 Chrome,请阅读此 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);

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

于 2014-12-22T06:11:06.990 回答