dポイントプレゼントキャンペーン実施中!

サブウィンドウの有無確認関数の中で「!!winVar」という記述がありますが、
これはいったい何を意味しているのでしょうか?
またソースの内容もいまいち理解できません。
細部の意味について知っておられる方がいましたら、
御教授のほど宜しくお願いします。


//子ウインドウ有無確認関数
function sbwin_closed(winVar) {

var ua = navigator.userAgent
if( !!winVar )
if( ua.indexOf('MSIE 4')!=-1 && ua.indexOf('Win')!=-1 )
return winVar.closed
else return typeof winVar.document != 'object'
else return true

}

A 回答 (2件)

こうすると、ややわかりやすくなると思います。


//子ウインドウ有無確認関数
function sbwin_closed(winVar) {

var ua = navigator.userAgent;
if( 'object' == typeof winVar ) {

if( -1 < ua.indexOf('MSIE 4') && -1 < ua.indexOf('Win') ) {
return winVar.closed;
} else {
return typeof winVar.document != 'object';
}

} else {
return true;
}

}

「winVar.document」の記述から、
winVarは
documentの上位のオブジェクト、
windowオブジェクトを想定してることが
推察されます。

indexOf('MSIE 4')は
uaの内容から文字列を探してるのですが、
「-1」が帰ってきた場合文字列が見つからなかったことを
指します。
    • good
    • 0

winVarにどういう値が入ってくるのか見えないのですが・・・。



ざっと見たところだと、
1.(!!winVar)
winVarがtrueかどうかをチェック。

1-1.ブラウザのユーザーエージェントを取得し、windowsのIE4であれば、winVarがクローズされているかどうかを返す。
(windowが表示されていればfalse、閉じられていればtrue)

1-2.ユーザーエージェントが1-1.以外の場合は、winVarのオブジェクトタイプがobjectかどうかをチェック。
(!=なので、objectじゃなければtrue、objectだったらfalseが返るのかな?)

2.winVarがfalseの場合は、trueを返す

という流れのようです。
要は呼び出し元関数に、true か false を返していると。

(!winVar)とすると、winVarがfalseの時、という意味です。
二つ重ねるとfalseの反対で、trueかどうかのチェックをしています。

意味がわからなければ、間にalertを入れて値を確認していくと良いですよ。
例えば、
if( !!winVar )
の前に
alert(!!winVar)
と入れてみたり、
alert(ua.indexOf('MSIE 4'))
と入れてみたりしたら、そこに入ってくるべき値が見れますので、それを元に参考書と付き合わせたらわかりやすくなります。
ご参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます!
大変ためになりました。
アラートなどでどのような値が入っているのか確認してみたいと思います。

お礼日時:2002/05/24 16:13

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