js サブウィンドウから親ウィンドウに値を渡す(クロスドメイン)window.opener、window.open()、.postMessage()
サブウィンドウでセットした値を親ウィンドウに渡したい
作成日:2021-03-30, 更新日:2021-03-30
基本
・クロスドメインが絡む、絡まないで内容が少し異なる
・「window.open()」でサブウィンドウを開く
・「window.opener」で親ウィンドウに何かする
クロスドメインは絡まない
▼親
<form id="text_popup" name="text_popup"> <input type="text" name="input01"> ~ 略 ~ <script>var url = 〇〇〇〇; window.open(url, 'window_name', 'width=250,height=350,scrollbars=yes,resizable=yes,status=yes'); </script>
▼子
var set_form = function(fromSub_val){ if(!window.opener || window.opener.closed){ // メインウィンドウの存在をチェック window.alert('メインウィンドウがありません'); // 存在しない場合は警告ダイアログを表示 return false; } var fm = window.opener.document.text_popup; //親ウィンドウの「name="text_popup"」 fm.input01.value = fromSub_val; //親ウィンドウの「input01」ドキュメント(nameが「input01」のinputタグへ値を代入 // fm.submit(); //親ウィンドウのフォームを送信 // // jqueryでセットする場合 // $(window.opener.document).find('#text_popup').find('[name="input01"]').val(fromSub_val); // window.close(); // 自身を閉じる return false; } set_form(〇〇〇);
クロスドメインが絡む
・postMessage()で値を渡す
・window.addEventListener()で値を受け取る
※参照:window.postMessage - Web API | MDN
▼親
<form id="text_popup" name="text_popup"> <input type="text" name="input01"> ~ 略 ~ <script> // postMessage()でやってきた値 window.addEventListener('message', function (e) { switch (e.data.action) { case 'form_val': var elm_form = $('#text_popup'); $.each(e.data.message, function(key){ elm_form.find('[name="'+key+'"]').val(e.data.message[key]); }); break; } }); var url = 〇〇〇〇; window.open(url, 'window_name', 'width=250,height=350,scrollbars=yes,resizable=yes,status=yes'); </script>
▼子
var set_form = function(){ if(!window.opener || window.opener.closed){ // メインウィンドウの存在をチェック window.alert('メインウィンドウがありません'); // 存在しない場合は警告ダイアログを表示 return false; } var form_val = ({ input01: '〇〇〇', input02: '〇〇〇' }); var postMessage = ({ action: 'form_val', message: form_val }); window.opener.postMessage(postMessage, '*'); // window.close(); // 自身を閉じる return false; } set_form();
window.open()で使うオプション
オプション | 対象部分 | yes (または 1 ) |
no (または 0 ) |
---|---|---|---|
width= |
ウィンドウの横幅 | ピクセル数で指定 | |
height= |
ウィンドウの縦幅 | ピクセル数で指定 | |
scrollbars= |
スクロールバー | 表示可能にする | 表示しない |
resizable= |
ウィンドウのサイズ変更 | 変更を可能にする | 変更を禁止する |
menubar= |
メニューバー | 表示する | 表示しない |
toolbar= |
ツールバー | 表示する | 表示しない |
location= |
ロケーションバー | 表示する | 表示しない |
directories= |
ディレクトリバー | 表示する | 表示しない |
status= |
ステータスバー | 表示する | 表示しない |