win_closed()
ウインドウ有無の確認関数。対象のウインドウが開いていれば false 閉じていれば true が返ります。
サブウインドウや親ウインドウが開いていないときにそれらを操作しようとした場合に発生する
エラーを回避するために、普通はその存在を確認する「closed」が使われます。ところが、この実装がブラウザによって
まちまちなため逆にエラーの原因となる場合が少なくありません。この関数は、ほんの数行の関数ですが、opener や closed をむき出しで使った時の、 Win版e4や5のバグによるエラー発生やMac版e4.5の実装違いによるエラーなどを大幅に減らすことが出来ます。 子ウインドウから親ウインドウを調べたい時は
win_closed(window.opener) と書いてください。
*参考:
■ウインドウ有無の確認関数のサポートURL
親子ウインドウ有無の確認関数
*このファンクションをコピーして<script>と</script>の間にペーストしておくだけでこの機能をクロスブラウザに利用できるようになります。
Cross-Browser のための Sample Function
Syntax : win_closed(window.対象ウインドウオブジェクト)
//ウインドウ有無確認関数
//e4,e5,e6,n4,n6,n7,m1,o6,o7,s1用
function win_closed(winOj) {
var ua = navigator.userAgent
if( !!winOj )
if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 )
&& ua.indexOf('Win')!=-1 )
return winOj.closed
else return typeof winOj.document != 'object'
else return true
}
Example
<script type='text/javascript'>
<!--
//ウインドウ有無確認関数
//e4,e5,e6,n4,n6,n7,m1,o6,o7,s1用
function win_closed(winOj) {
var ua = navigator.userAgent
if( !!winOj )
if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 )
&& ua.indexOf('Win')!=-1 )
return winOj.closed
else return typeof winOj.document != 'object'
else return true
}
function openwin(targetName){
//--サブウインドウを開く
win1 = window.open('',targetName
,"top=0,left=0,width=200,height=300,resizable");
//--サブウインドウ用HTML作成
var subwinhtm="<form>"
+" <input type='button' value='Close'"
+" onclick='self.close()'>"
+"</form>"
//--サブウインドウへ上記HTMLを書き出す
win1.document.write(subwinhtm)
win1.document.close()
win1.focus()
}
//-->
</script>
<form>
<input type="button"
onclick="alert(win_closed(window.win1))"
value="win1 が閉じていれば true 、開いていれば false"><br><br>
<input type="button"
onclick="if(win_closed(window.win1))openwin('a')"
value="win1が閉じていれば開く">
</form>