牛、豚、鶏、どれか一つ食べられなくなるとしたら?

子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。

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の状態を管理するロジックを作りこまないといけないのでしょうか?

A 回答 (2件)

細かなロジックを考える必要はありませんよ。


w がオブジェクトかどうか分からない時点で w.closed を評価するのがマズイだけですから、評価の順番を変えればいいんです。

var w;
function OpenSubWindow() {
  if (!w || w.closed)
    w = window.open("a.html", "sub", "resizable=no,scrollbars=no");
  else
    alert("閉じろ!");
}

ちなみに closed はメソッドではなくプロパティですので、w.closed() ではエラーとなります。
また、既に開いているときの処理は
  w.focus();
とすれば子ウィンドウがアクティブになるのでオススメです。
    • good
    • 1
この回答へのお礼

なるほど!w.focus()も含めて非常に参考になりました。

でも、ひとつ疑問が。「!w」って「初期化されていない」って意味になるんですかね??

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

お礼日時:2003/04/08 17:46

変数 w を OpenSubWindow内のみで宣言されているので呼び出されるたびに初期化していると思います。



var w;
function OpenSubWindow()
{

}

と 変数 w を OpenSubWindowの外で宣言すれば
w.closed() で子画面のチェックが出来るのではないでしょうか?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報