###前提・実現したいこと
showModalDialog()を多用しているWEBシステムにおいて、
Edgeブラウザ対応を実施したいと考えております。
Edgeでは、showModalDialog()が機能しなくなるため、
代替するダイアログにて改修しようとしている中で、
現状、jQuery UI dialogでの代替をすすめています。
既存処理が別ページのHTMLをダイアログ内に表示しているため、
iFrameを利用してdialog内に表示しているのですが、
既存ページ内の任意のボタンアクション(「保存」や「キャンセル」など画面毎に異なる)結果を
呼び出し元のページに渡したいのですが、その渡し方が現状不明な状況です。
iframe外の親画面とiframe内の子画面間のデータの受け渡し方法はネット上等に情報があるのですが、
ダイアログ自体(iframe外の親画面)の呼び出し元になる「親画面」と、
「iframe内の子画面」間のデータの受け渡し方法(呼び出し元での処理方法)を
ご教示いただきたいと存じます。
また、showModalDialogの代替方法として別手法をご存知でしたら、
ご教示いただけると幸いです。
何卒よろしくお願い申し上げます。
###補足情報(言語/FW/ツール等のバージョンなど)
VB.NET
VS2005
jQuery
AJAX
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
最少構成です。aspxではなくて、java ですが、やりたいことを実現するにはサーバーげんごは問いません。
html
1親画面に記述 2 3jquery,jqueryuiの参照は済んでるとする 4<div style="display: none"> 5<div id="modal"> 6 <div id="outer"> 7 <div id="inner"> 8 <iframe src="" id="ifr"></iframe> 9 </div> 10 </div> 11</div> 12</div> 13<script> 14// jquery ui dialog 初期化、済みとする。 15$("modal").dialog({.....}); 16// プロパティは、autoOpen: false, modal: true,title: 適当 17 18//ダイアログを開くメソッドの定義 19function showDialog() { 20 $("#modal").dialog("open"); 21 $("#ifr").attr("src", "bbb.aspx"); 22} 23// iframe 内、bbb.aspx から呼び出されるメソッドの定義 24var ifrdlgs = { 25 save: function() { 26 alert("save callback called"); 27 }, 28 cancel: function() { 29 alert("cancel callback called"); 30 } 31}; 32 33 34</script> 35 36テスト用ダイアログ起動ボタン 37<button onclick="showDialog()">kidou</button> 38
html
1次に、bbb.aspx です。 2少々面倒。 3保存ボタン 4 押下されると、サーバー処理が動作する。サーバー処理が戻すhtmlを以下のように定義する。 5 <script> window.onload = function() { save(); }</script> 6キャンセルボタン 7 押下されると、サーバー処理が動作する。サーバー処理が戻すhtmlを以下のように定義する。 8 <script> window.onload = function() { cancel(); } 9 10共通 11<script> 12function save() { 13 parent.ifrdlgs.save(); 14} 15function cancel() { 16 parent.ifrdlgs.cancel(); 17} 18</script>
以上です、大分端折りましたけど、これで動作します。実験済みなので、動かない場合は具体的に示してください。開発者画面、デバッグコンソールなどを駆使すれば、30分くらいで雛形完成です。
まずは、最小構成の雛形を作って、これで動きはオッケー、なのを確認してから、実際のソースを触るようにしてください。
html
1保存ボタン処理が返すhtml 2 3<script> parent.ifrdlgs.save() </script> 4 5キャンセルボタン処理が返す html 6<script> parent.ifrdlgs.cancel() </script> 7 8bbb.aspx が返す html 9jquery,jqueryui , css その他ロード済みとする。iframe 内のコンテンツなので、親でロード済みですが、それらは、ifrane 内には反映されないので別途読み込みます。 10<script> 11$(function() { 12 $("input[type=button]").button(); 13}); 14
親画面の ifrdlgs.save メソッド内で、$("#modal").dialog("close"); すればオッケー。
投稿2016/03/01 00:49
編集2016/03/01 01:34総合スコア1693
0
showModalDialog の2番目のパラメータがオブジェクトです。
window を渡せば、親の資源すべてにアクセスできます。
代替は、jquery-ui のモーダルパネルが候補ですが、showModalDialog
の書式を活かす方向で実装するとなると、
html
1window.shoModalDialog = function(url, param, options) { 2 // options を ; で分割、要素それぞれ、= で分割、各パラメータを、jquery-ui のダイアログ初期化に利用して、モーダルパネルを表示する、ような仕掛けになると思われます。 3url はそれぞれ固有の画面の jsp,php を指し示していると思うので、url の部分文字列から、どのような体裁のダイアログを表示するか判断できるかもしれません。 4iframe 利用の場合、iframe内から、top や parent をターゲットに画面更新させる処理がある場合、モーダルパネルでは、全画面が対象になってしまいます。面倒ですけど、ifraneの中に表示する画面の html を修正するか、同じドメインなら、onload/onreadystatechange などで iframe 内コンテンツのロードイベントをハンドルできるので、そこで親画面を更新するようなボタンイベントやリンク、フォームなどは設定変更してあげる必要がありますね。
モーダルダイアログ内で、iframe ということは、post や部分書き換えが絡む話だと思いますが、今までは、<base target="self"> とかやって、モーダルダイアログ内でポスト処理をやってたと思いますが、モーダルダイアログの垣根が取っ払われてしまうので、、、、確証無いですが、iframe をネストさせれば、最も内側の iframe の top は、最も外側の iframeになるかもしれません。
投稿2016/02/25 04:07
総合スコア1693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/26 03:31 編集
2016/02/29 15:45
2016/03/01 00:57 編集
2016/03/01 00:58 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/01 00:56
2016/03/01 01:48
2016/03/04 09:23