2007.06.27

MacのブラウザでJavaScriptエラーが発生

外部に公開する場合に
IEのヴァージョンにより動作が変わる為に
動作環境を確認して対応している場合には
全てのテストが必要です。

またIE以外の環境でも動いて欲しいという場合があります。

今回はMacについて説明したいと思います。

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


<script language='JavaScript'>
/***************************************************************************************************
*   :is_opener
*   :子ウインドウチェック
*引 数:
*戻り値:子ウインドウ(winVar)が開いていれば false閉じていればtrue が返ります。
*更 新:2007/06/24 ntakayama@ilovex.co.jp
***************************************************************************************************/
function is_opener(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 false
}


<!-- //--親または子ウインドウの有無確認関数 function win_closed(winVar) {
/* 子ウインドウから親ウインドウを調べたい場合は win_closed(window.opener) と書いてください
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="サブウインドウオープン">


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

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ntakayama