web-dev-qa-db-ja.com

JavaScriptキャプチャブラウザーのショートカット(ctrl + t / n / w)

これらのショートカットをキャプチャすることは可能ですか?

  • Ctrl+N
  • Ctrl+T
  • Ctrl+W

私はこれを試しましたが、うまくいきません:

$(window).keydown(function(event) {
  console.log(event.keyCode);
  event.preventDefault();
});

私が押すと T それが示している 84コンソールで、しかし私が押すと Ctrl+T 何も表示されず、新しいタブが開きます。

これらのショートカットをキャプチャして、ブラウザのアクションを防止したいと思います。

63

キャプチャー Ctrl Javascriptのキーボードイベント

サンプルコード:

_$(window).keydown(function(event) {
  if(event.ctrlKey && event.keyCode == 84) { 
    console.log("Hey! Ctrl+T event captured!");
    event.preventDefault(); 
  }
  if(event.ctrlKey && event.keyCode == 83) { 
    console.log("Hey! Ctrl+S event captured!");
    event.preventDefault(); 
  }
});
_

Firefox

(6.0.1テスト済み)

Firefoxでは、両方のイベントリスナーが機能します。を押すと CtrlT または CtrlS キーの組み合わせを使用すると、コンソールに両方のメッセージが表示され、ブラウザはタブを開かず、保存も要求しません。

_console.log_の代わりにalertを使用すると、event.preventDefault()が機能せず、新しいタブを開いたり保存を要求したりすることは興味深いことです。このバグを修正する必要があるかもしれません。


Chrome3

Chrome 3では、Firefoxのように機能します。


Chrome4

(テスト済み)

Chrome4では、特定のコントロールキーの組み合わせはブラウザーの使用のみに予約されており、Webページのクライアント側のJavaScriptによってインターセプトできなくなりました。
これらの制限はChrome3には存在せず、Firefox3/3.5とIE7/8(Windows)の両方と矛盾しています。

Chrome 4では、いくつかのキーボードの組み合わせを除き、Firefoxと同様に機能します。

  • CtrlN

  • CtrlShiftN

  • CtrlT

  • CtrlShiftT

  • CtrlW

  • CtrlShiftW

これらの組み合わせはJavascriptでキャプチャできませんが、ですが、埋め込みプラグインはこれらをキャプチャできます。たとえば、Youtubeの動画に焦点を合わせて、 CtrlT、ブラウザは新しいタブを開きません。


IE7/8

FirefoxまたはChrome3のように機能します。


IE9

(テスト済み)

IE9は再び黒い羊です。なぜなら、javascriptが Ctrl? キーボードイベント。多くのキーボードの組み合わせ(R、T、P、S、N、T)でテストしましたが、どちらも動作しませんでした。また、埋め込みアプリケーションはイベントをキャプチャできません。 Youtubeビデオでテスト済み。


@ Lime に感謝します link

98

2012年3月20日の時点で、Chrome修正があり、WebアプリケーションがChrome in js keydownイベントで純粋なjavascript、またはjQueryのようなライブラリで動作します)。

この修正により、Chromeがアプリケーションモードで開かれた場合に、この方法で実行できる場合、javascriptがこのキーの組み合わせを処理できるようになります。

修正はここに文書化されています:

10
JotaBe

他の答えを展開するには:

Chrome/Chromiumで特定の組み合わせをブロックするコード ここで定義されています 、im summary、 F11 フルスクリーンモードを終了し、タブまたはウィンドウを操作およびナビゲートするすべてがブロックされます。

[Shift]CtrlQ|N|W|T|Tab ↹

8
flying sheep

トラップする代わりに Ctrl+W ホットキー、 ウィンドウが閉じられたことを検出する は有効なオプションです:

「beforeunloadイベントは、ウィンドウ、ドキュメント、およびそのリソースがアンロードされようとしているときに発生します。

空でない文字列がreturnValueイベントプロパティに割り当てられると、ダイアログボックスが表示され、ユーザーにページを離れる確認を求めます(以下の例を参照)。値が指定されていない場合、イベントはサイレントに処理されます。」

2
Robin Millette

答えは実に簡単です。これは、javascriptのいくつかのトリックなしでは直接不可能です。

ブラウザによって異なります。ほとんどのブラウザはこのショートカットをキャッチし、独自のイベントに使用します。 (例:新しいタブを開く)ショートカットがJavaScriptエンジンに到達することはありません。

しかし、フラッシュでショートカットをキャッチするのは簡単です。しかし、これはユーザーフレンドリーなウェブサイトからはかけ離れています。

更新:

ここに短い例があります。ほとんどのブラウザは次の場合にアラートを表示します Ctrl+y が押されます。 (y = 89)

document.onkeydown = keyDownEvent;
document.onkeyup = keyUpEvent;

var isCtrl = false;

function keyDownEvent() {
    var keyid = event.keyCode;

    if(keyid == 17) {
        isCtrl = true;
    }
}

function keyUpEvent() {
    var keyid = event.keyCode;

    if(keyid == 17) {
        isCtrl = false;
    }

    if(keyid == 89 && isCtrl == true) {
        alert('CTRL-Y pressed');   
    }
}

84を89に置き換えると、 t、 何も起こりません。あなたはそれを試すことができます jsfiddle.netで

1
Robin