技 巧 鍵 盤 ─ KeyNavi:キーボードを活用してホームページを快適に─    
キー割当表示[Shift-H]        
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] ウィンドウの使用可否判定 ・サイトマップ [Shift-S]

■ ウィンドウの使用可否判定:kl_closed()

指定したウィンドウが閉じられていないか、利用可能かどうか調べるスクリプトです。

「window.open(url)」によって新しくウィンドウを開いた場合、 フレームを利用したページで別のフレームにアクセスしたい場合などに この関数が有効です。

目的のウィンドウが異なるサイトに移動した場合 ウィンドウの内部変数を参照したり設定しようとすると エラーになります。 これはセキュリティ的な配慮からなされるものです。

IE6:「アクセスが拒否されました」

ウィンドウの位置制御(moveBy/moveTo)、サイズ変更(resizeTo/resizeBy)などの 関数の実行もエラーになります(IE6)。

そこで当該ウィンドウに何か処理をしたい場合、 1.閉じられていないか 2.アクセス可能か の両方を調べます。 アクセス可否を調べるにはアクセスエラーが出るはずのコードを「Try/Catch」文内で 実行し 成功したらアクセスOK、失敗したらアクセス不可と判定できます。

Try/Catch文はIE4,NS4ではコード中に存在するだけでエラーになるため eval()で実行しています。
参考:Try,Catch文の互換性対策

【ウィンドウ利用可否判定1「kl_closed()」<keynavi_ja.js】

//--------------------------------------
//kl_closed(w,exist_check_only)
//返り値:ウィンドウが閉じられているorアクセス不可なら1
//w:ウィンドウオブジェクト
//exist_check_only:存在判定のみ実行
//--------------------------------------
function kl_closed(w,exist_check_only){
        if(!exist_check_only){
                var s="try{ w.document.location.href }catch(kl_err){ 0 }";
                if(KL_IE5 || KL_NS6 || KL_OP6) if(!eval(s)) return 1;
        }
        return w.closed;
}

引数「exist_check_only」が真の場合は単に 「closed」属性を確認しウィンドウが閉じられていないか チェックするだけです。

KeyNaviソース内では下記の関数を定義し 「対象窓がアクセス可能&KeyNaviが利用できるか」 の両方を確認するのに利用しています。

【ウィンドウ利用可否判定2「kl_closed2()」<keynavi_ja.js】

function kl_closed2(w){
        if(kl_closed(w)) return 1;
        return !w.KL_ACTIVE; //KeyNaviが利用不可なら「1」
}

【各フレームのアクセス可否判定サンプルHTML】

<script language="javascript" src="http://www.keynavi.net/files/keynavi_ja.js"></script>
<script language="javascript"><!--
for(var i=0;i<parent.frames.length;i++) alert(kl_closed(parent.frames[i]));
//-->
</script>

以下の例は新しいウィンドウを開き それが閉じられていないか、利用可能かどうか 調べます。

お気に入りなどを利用し 別のサイトに移動したり、ウィンドウを閉じるなどして どうなるか実験してみてください。

次の例ではウィンドウを移動&リサイズします。closedの場合はエラーが出ます。
これからも分かるように 関数の実行では「if(kl_closed())...」で 予めウィンドウの使用可否を調べ OKの場合にのみ実行するようにしましょう。

注: self[...] 上の「実行」フォームでは 異なるeval()実行で名前空間が共通になるよう winObjの参照、設定にself[]を使っています。通常は不要です。




【JavaScript@Keynavi.Net : ウィンドウ編 】
「Ctrl-矢印」でフォーカスを上下左右に移動できます。

  - ウィンドウサイズ取得:kl_windowwidth/height()
  - スクリーンサイズ取得:kl_screenwidth/height()
  - ウィンドウの使用可否判定:kl_closed()
  - フルスクリーン:kl_fullscreen(url,name)
  - フォーカスするウィンドウの切替え

トップへ戻る [1]
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] ウィンドウの使用可否判定 ・サイトマップ [Shift-S]
キー割当表示[Shift-H] ─ KeyNavi Project 2003 ─