2009年9月11日金曜日

Greasemonkey ホットキーの作り方メモ

GMailとかでショートカットキー(ホットキー)で次々メールを開いたり、返信したりとWebページなのにまるでローカルのアプリのように動かせるが、よく使うページでそういうホットキーを設定したい!と思ってGreasemonkeyでそれを実装する方法を調べてみた。

keyup Event

まずはキー入力のイベントを取得する方法。
document.addEventListener("keyup", function(e){
    alert(e.keyCode);
}, false);
これで、キーを押すとそのキーコードをダイアログで表示するようになる。

keyCode定数

イベントは取れたが、いったいどのキーがID何番なのかがよくわからない。定数はどこに定義されてるんだろうと調べてみたがいまいちわからんかったが以下の方法で一応ゲットできるみたい
const KeyEvent = document.createEvent("KeyboardEvent");
alert(KeyEvent.DOM_VK_N); // NキーのキーID

これらをふまえて

const KeyEvent = document.createEvent("KeyboardEvent");
document.addEventListener("keyup", function(e){
    if(e.keyCode == KeyEvent.DOM_VK_N){
        alert("キー入力検知!");
        location.href = "http://www.chishow.com/";
    }
}, false);
こんな感じでNキーを押すと指定URLにジャンプするスクリプトができた。こんなのであってるのかなぁ?
とりあえずこれで、ホットキーが設定されてないWebメールとかをがんがん読むのが楽になるじぇ

2 件のコメント:

Otchy さんのコメント...

これだけの実装だと、テキストエリアとかの入力でもイベントを拾っちゃうのが難しいところだね。
キューに KyeCode をためて特定のマッチを調べる方法で、複数キーの組み合わせをアサインするとか、あるいは、Ctrl/Shift/Alt を組み合わせるとかするとイイかもー。

Chishow さんのコメント...

そうか、テキスト入力時にひっかかっちゃうのか・・・
たまたま適応したページがテキスト入力のないページだったので気づかなかった
GMailとかどうやってるんだろう?
テキスト入力にフォーカスがあたったらショートカットが無効になるようにしてるのかな?