2016-05-24 12 views
0

Firefox用の「古い」XULベースのアドオンである、Firemacsのややハッキングされたバージョンを使用します。 keypressイベントを監視するには、プラグインが<overlay>を作成し、使用するスクリプト出典:Firefox XULアドオンがウェブサイトがキー押しイベントを盗むのを防ぐ方法を教えてください。

window.addEventListener('keypress', handler, true); 

をしかし、ウェブサイトは、イベントを「盗む」ことがあります。たとえば、SOの質問テキストボックスでは、C-bを入力できません。これは、一部の書式設定に短絡されているためです。同様に、Facebookはキーバインディングのを盗みます。特に、クリップボードからペーストするために使用します。

質問:アドオンを変更して、常にキー押しイベントを最初に捕まえることができますか?
エクストラ:これはどうでしたか?<overlay>は無効になりましたか?

答えて

1

​​とkeyupを使用してこれらを防止する必要があります。キーの押下は、​​に続いてkeyupに応答しています。あなたはそれが3番になることに気付くでしょう。したがって、e.stopPropagation(); e.preventDefaultでキーが伝播するのを防ぐには、window.addEventListener('keydown', func, true);をブロックする必要があります。

+0

ああ、おもしろい!さて、私は 'keypress'の慰めが好きで、' event.which'は明確に押されたキーを綴る。しかし、単に 'keydown'リスナーを' stopPropagation'に追加すれば、ブラウザには何も入力できません。したがって、 'keydown'のすべてをコード化し、' keyCode'sを文字に変換する唯一の選択肢はありますか?どうもありがとう! –

+0

@Michaëlあなたは 'keypress'がトリガするのを防ぐために' keyup'をブロックすることもできます。 – Noitidart

+0

私はこれを理解しているのか分かりません。私が 'keypress'を使うと、Facebookはアドオンにイベントを渡しません(私は* how *、彼らが' keydown'や 'keypress'を実装しているかどうかわからない')。したがって、私は 'keydown 'と何か*する必要があります。 'stopPropagation'と' preventDefault' *で常に 'keydown'イベントを止めてしまうと、無駄なブラウザが残ってしまいます。それで、私は、キー変換からキー変換への間違ったキーコードを手にして、 'keydown'にアドオンを実装しなければならないように思えます。あなたはそれに代わる方法があると言っていますか?どうもありがとう! –

関連する問題