読者です 読者をやめる 読者になる 読者になる

showModalDialog で渡した パラメータは、submit しても同じ維持される。

メモ
最初は、submit したら消えてなくなると思ってました。

parent.html

<script language="JavaScript">
function modal(){
  var x = [0, 1, 2];
  window.showModalDialog(
    './child.html',
    x,
    "dialogWidth=200px; dialogHeight=120px;"
  );
  
  alert(x);
}
</script>
<input type="button" value="モーダル" onClick="modal()">

child.html

<script language="JavaScript">
function modal_end(){
  alert(window.dialogArguments);

  var ary = window.dialogArguments;
  ary[1] = 5;
  alert(window.dialogArguments);
  
  window.close();
}
window.name = "child"
</script>
<input type="button" value="終了" onClick="modal_end()">
<form target="child">
  <input type="submit" value="クリック">
</form>

上記のような、parent.html と child.html があって parent.html から showModalDialog にて child.html を開きます。
child.html では、window.dialogArguments で 親から渡されたパラメータを参照出来るみたいです。なので、child.html 側で値を変更したら parent.html でも変更されています。(同じ参照だから?)


で、この時 child.html 側で submit しても同じ参照のままなのか疑問に思い試してみた。
showModalDialog で呼び出した Window から Submit した際に、新しい Window を立ち上げない方法 - お だ のスペース で書いてある方法で、
submit しても新しい Window が立ち上がらない様にすると child.html 側で変更が parent.html にも反映されていた。(同じ参照のまま?)
これ最初は出来ないと思ってました。でも試したら出来たのでよくよく考えてみると dialogArguments って window が持ってるから同じ window なら submit しても関係無いのかなと納得。


ちなみに、child.html の submit で新しい Window を立ち上げた場合は、新しく立ち上げた Window には dialogArguments は存在しませんでした。
パラメータを渡していないからなんでしょうかね。(そもそも Modal じゃ無くなってるし)