• ベストアンサー

showModalDialog()による新規ウィンドウ回避方法

struts + jspで開発を行っています。 showModalDialog()を使用し、子画面で行った事を親画面に反映させるといった開発を行っています。ですが、子画面でsubmit処理を行うと新規ウィンドウとして開かれてしまいます。何か回避方法をご存知の方いらっしゃいませんでしょうか?よろしくお願い致します。

  • kumon
  • お礼率90% (20/22)

質問者が選んだベストアンサー

  • ベストアンサー
  • BigBoin
  • ベストアンサー率36% (4/11)
回答No.2

既にある画面に名前を付け、それをターゲット指定すればshowModalDialogでも新規ウィンドウが開かれない事を確認しました。 しかしself.window.close();で子画面を閉じないといけないのでリクエストが完全に送られる前に画面が閉じてサーバー側に行かない可能性も出てきます。

kumon
質問者

お礼

先程に続きまして返答ありがとうございます。 BigBoinさんの回答通り変更を実施した所、新規ウィンドウが開かれる事なくsubmitする事が出来ました。ありがとうございます(^^) たびかさなる質問で申し訳ございませんが、回答にある問題点の他に、予測される問題等ございますでしょうか?

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.4

サーバに何らかのデータ通信を行う必要があるんですね。 そうでしたら、XmlHttpRequestを使ってバックグラウンドで通信させてあげるといいかと思います(いわゆるAjaxです) これならNo.2の『リクエストが完全に送られる前に画面が閉じてサーバー側に行かない』という 現象も回避できますし、サーバから取得したデータを使ってダイアログの表示を書き換えることもできます。 少々敷居が高いですが、経験しておいて損はないと思います。 詳しいサンプルコードなどは"ajax"か"XmlHttpRequest"で検索するとたくさん出てきます。そちらを参考にしてください。

kumon
質問者

お礼

返答ありがとうございます。 なるほど!参考になります(^^)バックグラウンドお処理試してみます。

回答No.3

kumonさん、こんにちは。 私はフレームを使って画面遷移できるようにしています。 私も画面遷移(サブミット)したら新しいウィンドウが開いたり、リンクをクリックしたら新しいウィンドウが開いたり・・・ といったことで困っていました。 参考サイトを忘れてしまいましたが、 フレームを用いるとページ遷移も行えます。 ・親.html ・子.html ・フレーム.html の三つを用意します。 親から子を開くときには子をURLに指定するのではなく、 フレーム.htmlを指定します。 そしてフレーム.htmlの中でフレームを使って 子.htmlを呼び出してあげます。 (フレームのwidthとheightを100%にすることでパッと見ではフレームを使っていることに気づきません) titleが必要なときはフレーム側でtitleを設定してあげないと表示されません。 あとは、子ウィンドウでリクエストを飛ばし、データの登録を行い、 親ウィンドウをリロードしてあげれば 登録したデータが反映されると思います。 その後で子ウィンドウを閉じます。 具体的なソースではなく、流れだけですがいかがでしょうか。

kumon
質問者

お礼

papillon68さんこんばんは! 返答ありがとうございます。 フレームを使用する場合は回答の通り実施するんですね!勉強になります。BigBoinさんの回答で変更してしまいましたので、今度papillon68さんの回答でやってみようと思います。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

submitはせずwindow.returnValueに親ウィンドウに渡したい値を セットしてからwindow.close()で閉じれば大丈夫だと思うのですが、 どうでしょうか?

kumon
質問者

お礼

返答ありがとうございます。 どうしてもsubmitを行わなわないといけないんです・・・申し訳ございません。

関連するQ&A

  • window.open()使用サブウィンドウをモーダルにする方法

    struts + jspで開発を行っています。 window.open()を使用してサブウィンドウを表示する際にサブウィンドウをモーダル化したいと思っていますがうまくいきません。どうすればモーダル化出来るでしょうか?以下のパターンはなしとさせてください。 1.showModalDialogの使用  理由)submitを行った際に新規にウィンドウが開くため 2.onblurの使用

  • showModalDialogの子画面での画面遷移

    お世話になっています。 mike219といいます。 現在Webシステムの開発をStrutsで行っております。 そこで、一つ悩みにぶつかったので質問させていただきました。 行いたいことは、下記のような動きです。 (1)JavaScriptでshowModalDialogを使って子画面を開きます。 (2)showModalDialogで開かれた画面にいろいろ書き込みます。 (3)開かれている子画面内にあるボタンをクリックして  子画面内での画面遷移を行います。 といった感じです。 現在(3)で問題があり、ボタンをクリックした後、 新規でブラウザが立ち上がり遷移先の画面が表示されてしまっています^ ^; なにか子画面で遷移先の設定をしないといけないと 思うのですが、JavaScriptの知識が浅いため良く分かっていないです。 どなたか助けていただけませんか?

  • showModalDialog内でのページ遷移

    こんにちは。 showModalDialogで呼び出された子画面から、再度画面遷移をしたいのですが、 普通に「Location.Href("XXXX.asp")」とすると新規にウィンドウが開かれてしまいます。 同じウィンドウ内で画面遷移することは可能でしょうか? よろしくお願いします。

  • ウィンドウのモーダル起動について

    WindowsXP、HTML、PHP5.2.5、Apache2.2で画像編集のプログラムを作成しています。 画像をアップロードをする画面を別ウィンドウでするように記述しました。 そのときに、親ウィンドウから子ウィンドウを開くときにモーダルで開くように記述し、コードは以下のようにしました。 【親ウィンドウ】 ●Javascript function WindowOpen4() //アップロード {   window.showModalDialog("uplord.php","new","scrollbars=no,resizable=yes,width=400,height=400");   history.go(0) } ●HTML <a href="javascript:WindowOpen4()"> <img src="images/up2.gif" border="0" onmouseover="this.src='images/up22.gif'" onmouseout="this.src='images/up2.gif'" alt="画像アップロード画面へ移動します"></a> このとき、子ウィンドウでアップロードするときに、 submitボタンをクリックするとまた子ウィンドウが開いてアップロードが完了したと出ます。 子ウィンドウのsubmitの処理はPHPでアップロードの処理をするようにしています。 また、完了メッセージはラベルのように表示するようにしています。 子ウィンドウで使用しているJavascriptはウィンドウを閉じる処理しかしておりません。 親ウィンドウまたは子ウィンドウに記述しなければならない処理があるのでしょうか?? ご存知の方、教えてください。 よろしくお願いします。

  • 親ウィンドウの画面遷移

    タイトルのとおりなのですが、子画面を閉じる時に どのようにすれば、親画面に指定のページを開けるように出来るのでしょうか。 現在、strutsでサーブレットの処理を行ってログイン画面を作成しているのですが、そこに戻るときにその画面を初期化したため、jspの画面に戻したいのです. 以上、よろしくお願いいたします

  • モーダルダイアログウィンドウの改修方法

    現在メンテナンスを担当しているWebアプリが モーダルダイアログウィンドウ(showModalDialog)を多用しています。 このシステムは画面は jsp と javascript で、後ろはJavaです。 特に、伝票の入力処理では各行の商品IDを入力するときにモーダルダイアログウィンドウ が開いて商品一覧が表示され、その中から商品を選択すると親画面に戻って商品情報が 表示される、という仕組みになっています。 親画面自体は開かれたままなので、画面遷移の考慮をしないで済む、という点では シンプルなプログラムになっています。 ところがこの「showModalDialog()」、ブラウザによって若干挙動が異なったり、 将来廃止されるらしい、とのことで改造を迫られています。 モーダルダイアログウィンドウを使わない設計がいいとは思うんですが、 どのような仕組みに変えた方がよいでしょうか。 例えば画面遷移で商品を選択して戻るような仕組みにすると、途中まで入力した伝票情報を すべて保持したまま遷移しなければなりません。 どのような仕組みがよいかご意見をお願いします。

  • showModalDialogで開いた画面から親画面のFunctionを呼び出すには?

    showModalDialogで開いた画面から親画面のFunctionを呼び出すには、どのように記述すればよいのでしょうか? ネットで探してみたのですが、該当する内容を探しきれずに困っています。 ご存知の方是非教えてください!

  • ダイアログ内での遷移方法

    親ウィンドウのリンクからJavaScriptのshowModalDialogでダイアログを表示する画面を作成しているのですが、表示したダイアログの画面にもリンクがあってダイアログ内で遷移してほしいのですが、別ウィンドウが開いてそちらの方に画面が表示されてしまいます。 JavaScriptのshowModalDialogやreturnValueで試しているのですがどうもうまくいきません。 何か方法をご存知の方いらっしゃいませんでしょうか? よろしくお願い致します。

  • showModalDialogの代替について

    当然ながら、window.returnValue、これ一行で親は子画面からの情報は入手出来ましたが、IE廃止に伴って、callback関数に変更して対応しました。 それで一つ問題がありまして、キャンセルの情報を入手したいです。 子画面.htmlの中の画面情報。(簡素化するため短めに編集しました) *************************************************************** <input size="30" type="password" id="addr_pass" value=""> <input type="button" value="OK" onClick="check()"> <input type="button" value="キャンセル" onclick="window.close();"> *************************************************************** 子画面.jsの中身 *************************************************************** var callbackid = window.name; var returnValue = { addr_pass: document.getElementById('addr_pass').value }; window.opener[callbackid](returnValue); window.close(); ******************************************************************* addr_passの入力情報は親.htmlに返す事は可能になりましたが 親.htmlにキャンセル情報を返すためには、何かしら必要になると思いますが、どのようにすれば宜しいでしょうか。 よろしくお願いいたします。 追記。 showModalDialogは便利なのに需要がないのはわかりますけどね。

  • 親ウィンドウのフォームの値を変更

    showModalDialogでオープンした子画面から、returnValueで値を返すのとは違う方法で、親ウィンドウのフォームの値を変更したいと思っています。 (その子画面をオープンすると同時に、親ウィンドウのフォーム値を変更したいため) その際に    window.opener.document.formA.hiddenA.value = "aaa" という風に記述しているのですが、「window.opener.documentはオブジェクトではありません」というエラーになってしまいます。window.openで開いた子画面からだと、この方法でできたと思うのですが・・・どうすれば変更できるでしょうか?そもそも、showModalDialogでオープンした画面から親ウィンドウの値を変更すること自体がダメなのでしょうか? よろしくお願いします。

専門家に質問してみよう