2009-05-23 6 views
1

Gmailの場合、たとえば、Ctrl + Bを押すと、ブラウザー(通常はブックマークマネージャーなど)に渡される代わりに、書式設定の目的でハイジャックされます。 comoposingの途中でメッセージurの太字の書式設定。 と同じです。 + Ctrl + uです。javascriptでキーコンボをハイジャックする方法は?

これはどのように行われますか?

+2

私の答えはこれをしないでください...しかし、私はそれがあなたが探しているものだとは思わない。 –

+0

ええ、そうではありません:) 実際に、私がやっていることはおそらくあなたが思っていたほど悪くはありません:私はローカルでgreasemonkeyスクリプト用に使用するつもりでした。 –

+1

誰でもバージョン1を元に戻せますか? – dmeister

答えて

0

は、ハンドラ関数を発射するonkeydownまたはonkeyupイベントを使用します。それに

var body = document.getElementsByTagName("body")[0]; 
body.onkeydown = function(event) { 
    var str = ""; 
    for (var prop in event) { 
     str += prop + ": " + event[prop] + "<br>"; 
    } 
    body.innerHTML = str; 
}; 

をあなたはイベントオブジェクトが持っているもののプロパティを見ることができます。

8

あなたはグローバルdocumentオブジェクトにonkeydownまたはonkeyupイベントハンドラを添付します。

window.onload = function() 
{ 
    document.onkeydown = function(event) 
    { 
     var keyCode; 

     if (window.event) // IE/Safari/Chrome/Firefox(?) 
     { 
      keyCode = event.keyCode; 
     } 
     else if (event.which) // Netscape/Firefox/Opera 
     { 
      keyCode = event.which; 
     } 

     var keyChar = String.fromCharCode(keyCode).toLowerCase(); 

     if (keyChar == "m" && event.ctrlKey) 
     { 
      document.title = "asdf"; 
      return false; // To prevent normal minimizing command 
     } 
    }; 
}; 

W3Schoolsのは、これらの使用に関するより多くの情報を持っている:私は「ASDF」のCtrl-Mを押すたびにタイトルバーの変更を作りたかった場合、私はこのように、window.onloadを通じてイベントハンドラを登録しますイベント:onkeydownおよびonkeyup

はまた、私は(のような、例えば、Firefoxでは、あなたは、IEでそれはevent.keyCodeだが、event.whichを通じてキーコードにアクセスすることになっている私は、イベントプロパティに関しては、ブラウザ間でいくつかの相違があることに注意すべきだと思いますFirefoxはevent.keycode-confusingをサポートしているかもしれませんが?)。そのため、私はPrototypejQueryのようなJavaScriptフレームワークを使ってこのようなことをすることをお勧めします。

+0

例を挙げてください。 (meta-(:P))の場合、CTRL + Mのキーコンボが使用されたときに、文書のタイトルをテキスト 'asdf'に変更する方法を示します。ありがとう、非常に感謝します。 –

+0

@asdf:確かに、私はあなたの答えを広げました。それが役に立てば幸い。 – hbw

+0

@htw:ありがとう、ありがとうございました:) 今、あなたはnetscape/firefox/opera/coverを持っています。そのコードはsafari/chromeのアカウントですか? –

3

ここでは、jQueryを使用し、htw's solutionが行うHTMLページのソースです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
    <title>Hijack Example</title> 
    <script type="text/javascript" src="../scripts/jquery-1.2.1.js"> 
    </script> 
    <script type="text/javascript"> 
     $(function(){ 
      document.title = "before keypress detected"; 
      $(document).keydown(function(event) { 
       // alert('stuff happened: ' + msg + " " + event.keyCode); 
       var keyChar = String.fromCharCode(event.keyCode).toLowerCase(); 
       if (keyChar == "m" && event.ctrlKey) { 
        document.title = "ctrl-m pressed!"; 
       } 
      }); 
     }); 
    </script> 
    </head> 

    <body id="body"> 
    <p>Change the path to jquery above as needed (search for ../scripts/jquery-1.2.1.js)</p> 
    <p>Watch the title bar, then press control-M, then watch the title bar again!</p> 
    </body> 
</html> 

これが誰かを助けてくれることを願っています!

関連する問題