JavaScript

ガイド:高橋 登史朗

Ajaxなど、何かと最近騒がれているJavaScriptの最新情報とその活用方法を解説します。

掲示板 取材依頼 問合せ

クロスブラウザを制する

掲載日: 2002年 08月 08日

クロスブラウザを制する Part 2 2-31 親子ウインドウの有無確認

[ update ] 2002/8/15 Gecko(Mozilla,N5,N7)がうまく動いていなかったので直しました









サブウインドウwin1が閉じていれば開き、閉じていなければ何もしない。


win_closed(window.サブウインドウ)
Win n3 n4 n6 n7 moz e4 e5 e6 o6 ,
Mac n3 n4 n6 n7 moz e4.5 e5 iCab,
Linux n3 n4 n6 n7 moz
親または子ウインドウの有無を確認するサンプルファンクションです。

<script language='JavaScript'>
<!--

  //--親または子ウインドウの有無確認関数 
  function win_closed(winVar) {

  /* 子ウインドウから親ウインドウを調べたい場合は 
  win_closed(window.opener) と書いてください
  Support: http://game.gr.jp/js-ml/samples/200102/openerTest.html
  */

    var ua = navigator.userAgent
    if( !!winVar )
        if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 )
             && ua.indexOf('Win')!=-1 ) 
             return winVar.closed
        else return typeof winVar.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="if(win_closed(window.win1))openwin('a')"
         value="サブウインドウオープン">
<br>サブウインドウwin1が閉じていれば開き、閉じていなければ何もしない。
</form>


* 緑文字が今回の関数
* 赤文字がこのスクリプトで最初に動作する部分
						
サブウインドウや親ウインドウが開いていないときにそれらを操作しようとした場合に発生するエラーを回避するために、普通はその存在を確認する「closed」が使われます。ところが、この実装がブラウザによってまちまちなため逆にエラーの原因となる場合が少なくありません。この関数は、ほんの数行の関数ですが、opener や closed をむき出しで使った時の、 Win版IE4や5のバグによるエラー発生やMac版IE4.5の実装違いによるエラーなどを大幅に減らすことが出来ます。 子ウインドウから親ウインドウを調べたい時は win_closed(window.opener) と書いてください。


シリーズ目次 |



関連用語: CDMA 1X WIN / 

ガイドメールマガジン
携帯電話のメールアドレスでは登録できません

掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます。