アプリ版:「スタンプのみでお礼する」機能のリリースについて

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();

}

A 回答 (2件)

#1さんがおっしゃるように


>これは何のオブジェクトを使っていますか?
がわからないと見当違いの回答になる可能性があります。

試しやすい方向で勝手に解釈しました。
subWin = window.open()
で子ウィンドウを開いています。
環境はxp,IE6です。

呼び出したウィンドウが存在しなくなっているので
subWinのプロパティを参照するとエラーになるの仕方がないと思います。
以下、エラーの有無によって処理を分けています。

function end(){
try{
var chkWin = subWin.closed;
subWin.close();
window.close();
}catch(e){
//エラー発生時
window.close();
}
}
    • good
    • 0
この回答へのお礼

おぉ,,,上手く動きました,,,

エラー時というのを利用できるんですね。

困ったときにはこのような手法を使ってみることにします。

ありがとうございました。

お礼日時:2009/09/24 20:17

不思議な書き方をしている所がありますね。



if ( subWin.closed == false ) {;
if(subWin.name+''=='OpenWindow'){;
subWin.close();
};

これでうまく動いています?

>subWin.name+''

も意味有ります? (長さ0の文字列を加える????)

>親ウインドウを子ウインドウ

これは何のオブジェクトを使っていますか?

http://msdn.microsoft.com/en-us/library/ms536392 …
のような物もあるので参考までに

この回答への補足

下記の通り、
alert(subWin.closed)
を追記して走らせたところ、概ねアラートが出ました。
しかし、子ウインドウが既に閉じられている状況で実行するとアラートが出ずにエラーになりました。

何かのヒントになるでしょうか。


function end(){

alert(subWin.closed);

if(subWin.closed == false){;
subWin.close();
};
window.close();
}

補足日時:2009/09/21 22:59
    • good
    • 0
この回答へのお礼

お答えありがとうございます。
○subWin.name+'' は、空白文字列を加えることで
それが数字ではなく文字列であると限定しているつもりです。

○window.open('URL','OpenWindow')
という感じで子ウインドウを開いています。

○よく考えたら、開く子ウインドウは限定されているので
下記のような簡素な書き方でも良いです。
しかし、症状は解消しません。

function end(){
if(subWin.closed == false){;
subWin.close();
};
window.close();
}

お礼日時:2009/09/21 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!