0

Firefox のshowmodaldialog からwindow.returnValue配列オブジェクトを取得していますが、IE と Chrome ではエラーが発生します。

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

IE9 ではなく Firefox でも配列が機能します。showModalDialogボックス内のコードを参照してください。

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

これは IE9 ではなく Firefox でも機能します。

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);

splice最後の行では、 のメソッドを借りてArray.prototype、返された配列から新しい配列を作成します。

于 2014-12-22T06:11:06.990 に答える