« localhost では正常に動くのに マシン名でアクセスするとセッションを取得できない? | トップページ | TortoiseSVN で接続ユーザを変更する »

2011年2月 1日 (火)

JavaScript で Ctrl+R を禁止する (追記)

「教えてGoo」、「OKWave」にて、

「F5とCtrl+R の「更新」を禁止にしたい。」

という質問があり、その回答が・・・

document.onkeydown = keys;

function keys(){
 switch (event.keyCode ){
  case 116: // F5
  case 82: // Ctrl + R 
   event.keyCode = 0;
   return false;
   break;
 }
}

となっていたが、このままでは通常の「r」キーが無効となるため、
「r」および「R」が入力できなくなる。

※「r」のキーコード=82、「Ctrl」のキーコード=17

その為、上記コードを修正し、「Ctrl」が押されているかどうかを調べる必要がある。

document.onkeydown = keys;

function keys(){

 switch (event.keyCode ){
  case 116: // F5
   event.keyCode = 0;
   return false;
  case 82: // Ctrl + R
   if( event.ctrlKey ){
    event.keyCode = 0;
    return false;
   }
   break;
  }
}

また、上記ソースはIEでは動作するが、Firefoxで正常に動かない
そのため下記のように変更する

window.document.onkeydown = keys;

function keys(eve){      …※1
 var winjudge = false ;
 if(eve==null){
  eve = window.event ; 
…※2
  winjudge = true ;
 }

 var keyCode = eve.which ? eve.which : eve.keyCode ; …※3
 switch ( keyCode ){
  case 116: // F5
   if(winjudge) eve.keyCode = 0; …※4
   return false;
  case 82: // Ctrl + R
   if( eve.ctrlKey ){
    if(winjudge) eve.keyCode = 0;
    return false;
   }
  break;
 }
}

変更内容を説明すると・・・

  1. IEでは「event」がグローバル変数のため認識できるが
    Firefoxでは「event」が認識できない
    そのため、「eve」という変数を関数の引数として宣言する。
     
  2. Firefoxでは関数の第一引数としてイベントが渡されるため「eve」を認識できるが
    IEではそれを認識することができない
    そのため、「eve = window.event」でイベントを再定義する
     
  3. IEではどのキーが押されたかを「eve.keyCode」で取得できるが
    Firefoxでは正しく取得できない
    そのため「eve.which」でキーコードを取得する
     
  4. IEでは「eve.keyCode = 0;」でキーイベントを無効にできたが
    Firefoxではこの部分を実行すると無効にできなかった
    そのためIE以外は「return false;」のみを実行する

    ↑上記で上手くいかない場合は
    「window.event.returnValue = false;」を試してみると良いかも?

■今回の確認した環境

IE 8.0.6001.18702
Firefox 3.5.16
Google Chrome 8.0.552.237

※上記以外では確認していないため、使用ブラウザ毎に確認することをお勧めします

« localhost では正常に動くのに マシン名でアクセスするとセッションを取得できない? | トップページ | TortoiseSVN で接続ユーザを変更する »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/153605/50747653

この記事へのトラックバック一覧です: JavaScript で Ctrl+R を禁止する (追記):

« localhost では正常に動くのに マシン名でアクセスするとセッションを取得できない? | トップページ | TortoiseSVN で接続ユーザを変更する »