• ベストアンサー

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