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