• ベストアンサー

HTAで,親ウインドウを閉じると同時に子ウインドウも閉じる

HTAを使っています。 *.htaのファイルにjavascriptを下記のとおり書いています。 目的は,親ウインドウで「閉じる」というボタンを押すことで 親ウインドウを子ウインドウを閉じるという動作をさせることです。 概ね上手く動きますが,子ウインドウが既に閉じられている状況で実行すると,「リモートサーバマシンが存在しないか,利用できません。」とエラーになります。 WINDOWS2000では問題無く動きますが,XPだとエラーが表示されます。 どうすれば,子ウインドウの状況によらず正常に動作するでしょうか? ########################################################## <input type="button" value="終了" onclick="closeWindow()" class="tukuru"> var subWin=""; //subWinをグローバル変数として宣言 function closeWindow(){ item1.style.display=""; setTimeout("end()",2000); } function end(){ if ( subWin.closed == false ) {; if(subWin.name+''=='OpenWindow'){; subWin.close(); }; }; window.close(); }

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

  • ベストアンサー
  • med2dic
  • ベストアンサー率77% (21/27)
回答No.2

#1さんがおっしゃるように >これは何のオブジェクトを使っていますか? がわからないと見当違いの回答になる可能性があります。 試しやすい方向で勝手に解釈しました。 subWin = window.open() で子ウィンドウを開いています。 環境はxp,IE6です。 呼び出したウィンドウが存在しなくなっているので subWinのプロパティを参照するとエラーになるの仕方がないと思います。 以下、エラーの有無によって処理を分けています。 function end(){ try{ var chkWin = subWin.closed; subWin.close(); window.close(); }catch(e){ //エラー発生時 window.close(); } }

chugokuSSS
質問者

お礼

おぉ,,,上手く動きました,,, エラー時というのを利用できるんですね。 困ったときにはこのような手法を使ってみることにします。 ありがとうございました。

その他の回答 (1)

  • Chary_spy
  • ベストアンサー率40% (75/183)
回答No.1

不思議な書き方をしている所がありますね。 if ( subWin.closed == false ) {; if(subWin.name+''=='OpenWindow'){; subWin.close(); }; これでうまく動いています? >subWin.name+'' も意味有ります? (長さ0の文字列を加える????) >親ウインドウを子ウインドウ これは何のオブジェクトを使っていますか? http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx のような物もあるので参考までに

chugokuSSS
質問者

お礼

お答えありがとうございます。 ○subWin.name+'' は、空白文字列を加えることで それが数字ではなく文字列であると限定しているつもりです。 ○window.open('URL','OpenWindow') という感じで子ウインドウを開いています。 ○よく考えたら、開く子ウインドウは限定されているので 下記のような簡素な書き方でも良いです。 しかし、症状は解消しません。 function end(){ if(subWin.closed == false){; subWin.close(); }; window.close(); }

chugokuSSS
質問者

補足

下記の通り、 alert(subWin.closed) を追記して走らせたところ、概ねアラートが出ました。 しかし、子ウインドウが既に閉じられている状況で実行するとアラートが出ずにエラーになりました。 何かのヒントになるでしょうか。 function end(){ alert(subWin.closed); if(subWin.closed == false){; subWin.close(); }; window.close(); }

関連するQ&A

  • 子ウィンドウを手前に表示する

    子ウィンドウがまだ開かれていない場合に、子ウィンドウを開く。子ウィンドウがすでにある場合に子ウィンドウが手前に表示されるボタンを作りたいです。 今、作成中のPROGは以下です。 var subwin; function display(url){  if(subwin && !subwin.closed){   subwin.focus();  }else{   subwin = window.open(url, "", "width=768,  height=512");   subwin.moveTo(125,120);  } } このPROGでは、一度目のopen()は可能なのですが、テストでウィンドウを閉じて、もういちどクリックしてみると二度目からopen()されずに、エラーが出てしまいます。 どなたか、解決法を教えてください。 IE6、sp2です。

  • 親ウィンドウから子ウィンドウの子ウィンドウを閉じたい

     親ウィンドウから子ウィンドウを開き、 その子ウィンドウで子ウィンドウ(孫ウィンドウ?)を開きます。 その状態で、親ウィンドウの画面移動で、子ウィンドウと孫ウィンドウを閉じたいのですが、できません。 JavaScript1--  ssWin = window.open('---'); ---- JavaScript2--- if(ssWin != null){ if (!ssWin.closed){ssWin.close(); }} ------ 子ウィンドウまでは上記の方法で閉じれるのですが、孫ウィンドウの制御となると、どうやったらいいかわかりません。  どなたかすいませんが、いい方法がありましたら、ご教授くださいませ。

  • 親、子、孫のウインドウを同時に表示するのは?

    親と子のウンドウを同時に開くのは 親のファイルに以下のように書けば <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!--// function openWindow() { window.open("","windowname"); } //--> </SCRIPT> </HEAD> <BODY> <A HREF="ko.html" onClick=openWindow() TARGET="windowname">子ウインドウ</A> </BODY> 出来るんですが、子のファイルに同じように書くと 子のウインドウが孫に変わってしまいます。 親、子、孫を同時に表示するのには、どうすればよいか、よろしくお願いします。

  • 子ウインドウを開き、BLOBをダウンロードして、親ウインドウから閉じたい

    大変恐縮ですが、質問です。 window.openで子ウインドウ(jsp)を開き、その中でDBからBLOBをダウンロードするサーブレットを実行して、IEの中でワードを開きます。 親ウインドウで、そのダウンロードしたワード(IE)を閉じたいのです。 ◆子ウインドウを開く win1 = window.open("../jsp/blob001.jsp","a",~~~ ◆親ウインドウで子ウインドウが存在するか確認 function win_closed(winVar) { /* 子ウインドウから親ウインドウを調べたい場合は win_closed(window.opener) と書いてください Support: http://game.gr.jp/js-ml/samples/200102/openerTest.html */ var ua = navigator.userAgent if( !!winVar ) if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 ) && ua.indexOf('Win')!=-1 ) return winVar.closed else return typeof winVar.document != 'object' else return true } ~~~~~~~~~ if(!win_closed(window.win1)){ ココで子ウインドウを閉じるたい } window.win1.close();では、閉じれません。アドレスがjsp/blob001.jspではなくなっていてservlet/blobinsになっているからだと思います。 説明が下手ですいませんが何卒宜しくお願い致します。

  • サブウィンドウの画面制御について

    過去スレを確認しましたが、同じようない内容のモノがなかったため質問させて頂きます。 サブウィンドウ画面の制御についての質問なのですが、 親→子→孫といったように3画面同時に表示する場合があります。 この時、親を閉じると子と孫も、子を閉じると孫も同時に閉じたいと思っています。 しかし親から子、子から孫といったように一階層だと閉じることができますが、 親から孫と二階層になると閉じる事ができません。 どなたか解決方法をご存知の方がおられましたら、 ご教授頂けますでしょうか。 よろしくお願いします。 実装内容は以下のようになっています。 (必要部分以外は省略しています) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----------------子画面用JavaScript-------------------- ◆子を開く function openWin1(){ subWin1 = window.open(url,"subWin1",""); } ◆子を閉じる function closeWin1(){ if(typeof(subWin1) != 'undefined') { // 子ウィンドウを閉じる subWin1.close(); } // 孫ウィンドウを閉じる closeWin2(); } ----------------------------------------------------- ---------------孫画面用JavaScript-------------------- ◆孫を開く function openWin2(){ subWin2 = window.open(url,"subWin2",""); } ◆孫を閉じる function closeWin2(){ if(typeof(subWin2) != 'undefined') { // 孫ウィンドウを閉じる subWin2.close(); } } ----------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • サブウィンドウから親ウィンドウのファンクションを起動

    おせわになっております。 サブウィンドウから親ウィンドウのファンクションを起動する方法について困っています。 親ウィンドウから var subWin = window.open("a.html", "sub") でオープンしたサブウィンドウを閉じる場合に サブウィンドウから親ウィンドウの function sub_close() { subWin.close(); } を呼び出して閉じる処理をしています。 (サブウィンドウでwindow.opener.sub_close()) #これは正常に処理されます。 ここで問題なのですが、サブウィンドウがフレームの場合に、フレームセットされたHTMLから window.opener.sub_close() というような方法では親画面の操作ができないのでしょうか?(できませんでした。) 初歩的な質問で申し訳ないのですが、何かよい方法があれば教えてください。 宜しくお願いします。

  • 親ウィンドウから子ウィンドウのURLを取得する方法

    openメソッドで開いた子ウィンドのURLを親ウィンドウから取得することは できますか? 子ウィンドウで色々なページに移動し、ある時点で表示されている 子ウィンドウのURLを親ウィンドウで取得したいのです。 以下の様なソースを書いてみましたが駄目でした。 var child; function OpenWindow() { child = open("http://xxx.yyy.zzz/", ""); } function GetChildURL() { var child_url = child.location.href; }

  • 子ウィンドウから子ウィンドウ

    子ウィンドウから文字をクリックして、 同じ大きさの子ウィンドウを開かせたいのですが、 下記のJavaScriptでは子ウィンドウが開きません。 子ウィンドウから子ウィンドウを開かせるには どのようにしたらいいのでしょうか? ご回答宜しくお願い致します。 head内は、 <script type="text/javascript"><!-- function subwin(file){ window.open(file,"subwin","resizable=1, width=600, height=500, scrollbars=yes"); } //--></script> body内の呼び出し部分は、 <a href="ファイルのURL" onclick="subwin('ファイルのURL'); return false;">

  • 子ウィンドウの存在確認

    子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。 function OpenSubWindow() { if(!w.closed()){ alert('閉じろ!'); }else{ w = window.open("a.html","sub","resizable=no,scrollbars=no"); } } この場合、当然のことですが、変数wはelseの中で初めて初期化されるため、ifの条件でオブジェクトが存在しないことによりエラーが発生します。 でも、"sub"というname属性のウィンドウが開いているかどうかを確認したいのですが、どうすればよいのでしょうか?wを初期化する方法が何かあるのでしょうか?それとも、subウィンドウのopen/closeの状態を管理するロジックを作りこまないといけないのでしょうか?

  • 子画面を自動で閉じた後、親画面を再描画するJavaScriptが・・・・

    IEだと動くんですけど、Netscapeだと動かないんです。なんかsecurityErrorが出まして・・・。子画面を閉じるまでは動いてるんですが、親の再描画の部分でエラーが出てるようです。どこが原因かお分かりになる方いらっしゃいますか?よろしくお願いします。 <%//処理を何秒後に行うか 時間をset%> function setTimer(){ timer1=setTimeout("clo()",3000); timer2=setTimeout("location()",3000); } <%//windowをclose%> function clo(){ window.close(); } <%//親画面を再描画する%> function location(){ var url='<html:rewrite page="/hogehoge/hoge.do" />'; window.opener.location.href = url+'?member_id='+変数; }