質問: ### 前提・実現したいこと showModalDialog()を多用しているWEBシステムにおいて、 Edgeブラウザ対応を実施したいと考えております。 Edgeでは、showModalDialog()が機能しなくなるため、 代替するダイアログにて改修しようとしている中で、 現状、jQuery UI dialogでの代替をすすめています。 既存処理が別ページのHTMLをダイアログ内に表示しているため、 iFrameを利用してdialog内に表示しているのですが、 既存ページ内の任意のボタンアクション(「保存」や「キャンセル」など画面毎に異なる)結果を 呼び出し元のページに渡したいのですが、その渡し方が現状不明な状況です。 iframe外の親画面とiframe内の子画面間のデータの受け渡し方法はネット上等に情報があるのですが、 ダイアログ自体(iframe外の親画面)の呼び出し元になる「親画面」と、 「iframe内の子画面」間のデータの受け渡し方法(呼び出し元での処理方法)を ご教示いただきたいと存じます。 また、showModalDialogの代替方法として別手法をご存知でしたら、 ご教示いただけると幸いです。 何卒よろしくお願い申し上げます。 ### 補足情報(言語/FW/ツール等のバージョンなど) VB.NET VS2005 jQuery AJAX
回答: showModalDialog の2番目のパラメータがオブジェクトです。 window を渡せば、親の資源すべてにアクセスできます。 代替は、jquery-ui のモーダルパネルが候補ですが、showModalDialog の書式を活かす方向で実装するとなると、 ``` window.shoModalDialog = function(url, param, options) { // options を ; で分割、要素それぞれ、= で分割、各パラメータを、jquery-ui のダイアログ初期化に利用して、モーダルパネルを表示する、ような仕掛けになると思われます。 url はそれぞれ固有の画面の jsp,php を指し示していると思うので、url の部分文字列から、どのような体裁のダイアログを表示するか判断できるかもしれません。 iframe 利用の場合、iframe内から、top や parent をターゲットに画面更新させる処理がある場合、モーダルパネルでは、全画面が対象になってしまいます。面倒ですけど、ifraneの中に表示する画面の html を修正するか、同じドメインなら、onload/onreadystatechange などで iframe 内コンテンツのロードイベントをハンドルできるので、そこで親画面を更新するようなボタンイベントやリンク、フォームなどは設定変更してあげる必要がありますね。 ``` モーダルダイアログ内で、iframe ということは、post や部分書き換えが絡む話だと思いますが、今までは、 とかやって、モーダルダイアログ内でポスト処理をやってたと思いますが、モーダルダイアログの垣根が取っ払われてしまうので、、、、確証無いですが、iframe をネストさせれば、最も内側の iframe の top は、最も外側の iframeになるかもしれません。