FirefoxでWebサイトによるキーボードショートカットの盗用を禁止する方法


51

多くのWebサイト、特にリッチテキスト編集(このサイトも同様に有罪です)を含むすべてのWebサイトは、Firefoxの制御に通常使用されるキーボードショートカットを盗み、代わりに他のことをさせています。 Cmd-number、Cmd-L、Cmd-T、またはCmd-Kのようなものを押すと、それはまったく不愉快です。停止させることはできますか?

実際には、すべてのCmd- *ショートカットの盗用を禁止できれば、おそらくそれが最善の方法です。私はそれらが有用なものに使われるのを見たことがない。出来ますか?


3
同意した、それは不愉快だ。 FogBugzはキーボードショートカットのとても良い実装をしています。 CTRL-; ショートカットモードに入り、画面に表示されているすべてのコマンドを使用可能なショートカットで強調表示します。すべてのショートカットはコンボですので、新しいケースは CTRL-; N そして編集は CTRL-; E。慣れるのがとても簡単で、競合を解消できます。私はもっ​​と多くのサイトがこのようなものを使うことを望みます。それはユーザーにとってより簡単で、ブラウザのショートカットを上書きしないからです。それはFogBugzと同じ人々からのものであるため、あまりにも悪いSuperUserはこれをしません。
Sam


1
これはで議論されています この機能要求はBugzillaで
Mechanical snail

私は仕事中にcmd + Nをめちゃくちゃにしているイントラネットのページをたくさん訪れるので、キーボードから新しいブラウザウィンドウを開くことはできません。とても迷惑!
Nicolas Miari

回答:


21

Greasemonkeyの新しいおかげで @run-at 財産、これは今可能です!

私はからインスピレーションを得ました このスクリプト そして このスクリプト キーボードショートカットをうまく傍受するUserscriptにそれらを組み合わせる Ctrl + T そして Ctrl + S 。 Firefox 17 ESRとFirefox 25でテストしました。

// ==UserScript==
// @name           Disable Ctrl+s and Ctrl+t interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

// Keycode for 's' and 't'. Add more to disable other ctrl+X interceptions
keycodes = [83, 84];  

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    // alert(e.keyCode ); //uncomment to find more keyCodes
    if (keycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    // alert("Gotcha!"); //ucomment to check if it's seeing the combo
    }
    return false;
}, !window.opera);

1
これはとても役に立ちました。 OS Xユーザーは入れ替えるべき e.ctrlKey にとって e.cmdKey そして e.cmdKey && e.shiftKey ブラウザのショートカットのほとんどを取り戻すために。
JamesGecko

このスクリプトは私のために追加することでCTRL + TABを修正するために私のために働きます 9 キーコード配列へ。ありがとうございます。
Mike Mueller

@JamesGecko経由で見つけた この コマンドキーにe.metaKeyを使用する必要があります。
riezebosch

3
このコードは機能します。 Ctrl + Keyだけでなく、Ctrl + Alt + Key、Ctrl + Shift + Key、Ctrl + Alt + Shift + Keyもフィルタリングされることに注意してください。これはCtrl修飾子の状態のみをチェックするためです。
RomanSt

最初の質問:Firefox上で動作するとされているスクリプトについて、なぜブラウザがOperaであるかどうかチェックするのですか?そして2番目の質問:コメントは 's'と 't'の文字コードを言っていますが、そのコードは本当に 'S'と 'T'のためのものです。何らかの理由で大文字のコードを指定する必要がありますか?ありがとう。
Douglas Held

5

問題は、キーパッドを盗むJavaScriptキーボードイベントであるように思われるので、(Greasemonkey経由で使用される)JavaScriptスクリプトを構築することは不可能です。 バインド解除 これらすべてのキーボードイベントは、このようにブラウザに各ショートカットの正しい使い方を返しますか?

それがどれほど実現可能かはわかりませんが、JavaScript / Greasemonkeyの経験が豊富な人が役に立つことがあるかもしれません(SOについて尋ねる価値があるかもしれません)。


2
これはonKeyPressメカニズムを通して機能します - Firefoxはすべてのキー押下を最初にウェブサイトに送り、それがキャンセルされたり傍受されなかった場合にのみそれを見ます。ウェブサイトや何らかの形で直接Firefoxの機能を実行する前にキー入力を傍受するような、Greasemonkeyの魔法が可能かもしれませんが、それは明らかには程遠いものです。
taw

4

問題は、どのページでもkeypressイベントを取得するためのイベントハンドラを設定するJavascriptを実行できることです。FirefoxのJavascriptコントロールは他のJavascript機能を壊さずにそれを止めるほど細かい粒度ではありません。

これを防ぐ唯一の方法は、Javascriptを無効にすることです([ツール] - > [オプション]、[コンテンツ]タブ、 JavaScriptを有効にする )あるいは、NoScriptのような拡張子を付けて、サイトごとにJavascriptを無効にすることもできます。

Firefoxはあなたを防ぐことができます 確かな ウィンドウの移動/サイズ変更、コンテキストメニューの変更または無効化などのJavascriptの使用。しかし、Webサイトがキーボードイベントを傍受するのを防ぐことはできません。

このレベルの制御を可能にする拡張機能があるかもしれません - 私はそれを知りません。
あります Javascriptのオプション しかし、その拡張子はもう更新されていません。


1
Javascript Optionsや他のいくつかの拡張機能はこれをサポートしていません。すべてのJavaScriptをブロックすると、Webがほとんど使用できなくなります。これは実際には選択肢ではありません。
taw

4

広範囲の調査はFirefoxの現在のバージョン(3.6.x)現在でこれが不可能であることを示しています - すべての重要なバインディングの衝突は優先順位によって解決されます。ウェブサイト> Firefox - これはかなり愚かな注文です。私が試したアドオンはどれも修正できないようです。

おそらくそれは将来のバージョンで実行可能になるかもしれませんが、今のところ答えは - 不可能です。


1
ほぼ4年後にFF 30.0を使用していますが、これはまだ問題です。私はMartinのGreasemonkeyのアイデアを試してみます。
LGT

2
ほぼ8年後にFF 53.0を使用していますが、これはまだ問題です。
Daniel

3

バグが報告されてから11年後に、Mozillaはついに行動を起こし始めました https://bugzilla.mozilla.org/show_bug.cgi?id=380637 これはこの問題を直接解決します。

Firefoxの現在のバージョン(私はv.59を使っています)ではサイトごとに新しい設定がありますが、残念ながら(バグチケットに関する最近のコメントで議論されているように)v.64ではまだ問題があります。 バックスペース そして デル ブラウザ自体の中で働くことからのキー(例えば入力されたテキストを編集するため)、これはほとんどの人にとって取引を妨害する可能性があります。

更新 :これはバグです https://bugzilla.mozilla.org/show_bug.cgi?id=1445942 これは先週修正されたとされる。うまくいけば、修正はFF 65で表示されます。

しかし、あなたは現在の実装を試すことができます(そしてうまくいけば、Firefox 65の修正版にアクセスすることができます)。 (i) ロケーションバーのアイコン(またはCtrl + Iキーを押して、そのショートカットが乗っ取られたStack Overflowのようなサイトにいないと仮定して)してから、無関係に見える矢印をクリックする Connection > メニュー項目。

(この設定はv.59以降では見つけにくくなったことを指摘してくれた@PerJohanssonに感謝します。)

今すぐ下部に「詳細」を表示する必要があります。それをクリックすれば、ついにあなたは Page Info ダイアログ。今すぐ行く Permissions タブをクリックし、キーボードショートカットの上書き設定を調整します。

Firefox screenshot

しかし無責任なアプリケーションでは(私が見ている 君は (アトラシアン)尋ねずにあなたのキーボードを引き継いで、私はまだこれが役に立つと思います。私はむしろ使用することができると思います。俺の ページアップ / ページダウン とカーソルキーでJIRAをナビゲートする かのように それは行儀がよく、ユーザーフレンドリーなアプリケーションでした。コメントを書いたり編集したりする必要があるときに、サイトのショートカットのブロックを一時的に解除するのは少し厄介ですがそれほど難しくありません。


1
Firefox 64(表示される場所がわからない)では、[接続] =>をクリックする必要があります。このidalogボックスにアクセスするための「詳細情報」。パーミッション歯車は代わりに設定に入りますが、これは正しい場所ではありません。
Per Johansson

@ PerJohanssonに感謝します。チケットを更新しました。
Lambart

0

サードパーティのプラグインがメインのブラウザウィンドウからフォーカスを得ている可能性があります。その場合、キーボード入力(割り込みを除く)はプラグインによって傍受されます。これが気に入らない場合は、問題のあるプラグインをいつでも削除できます[おそらくフラッシュだと思います]。


3
Flashもそれを行いますが、普通のJavascriptはショートカットを盗むことができます。ここで新しい質問を開始し、質問テキストウィンドウ内でCmd-L(Mac以外の場合はCtrl-L)を押します。 URLバーに移動する代わりにショートカットが盗まれ、ハイパーリンクの挿入ダイアログが表示されます。これはめったにありませんでしたが、最近それを始めたWebサイトが多すぎます。
taw

私はちょうどFirefoxを実行しているWindows 7でそれを試してみました、そして私はそれが通常するように直接アドレスバーに飛びました。
Daisetsu

すみません、私ははっきりしませんでした - これはリッチテキストボックスダイアログが選択されたときだけ起こります。あなたはそれをやりました?私はFirefox、Opera、Safari、そしてChromeでOSXをテストしました。通常4つすべてでCmd-LはURLバーにジャンプします(そしてCtrl-Lは何もしません)。質問の本文を編集するとき、Cmd-LとCtrl-Lの両方が代わりにハイパーリンクの挿入ダイアログを表示します。
taw

あなたは正しいようです。これを防ぐ方法はわかりません。 :(それは今面白い質問ですので、私はあなたの質問を支持します。誰もそれに答えないなら私はそれに恩恵を投げます。
Daisetsu

問題はプラグインにはありません。プラグインはそれ自体が別の問題です。そして別の問題、結局のところ。プラグインでは、フォーカスはすべてプラグインによって盗まれます。これは別のエンティティだからです。 JavaScriptでは、FirefoxのUIはJavaScriptであり、独自のバインディングがありますが、サイトは同じレベルのバインディングを定義できます。これまでのところ、あります それでも これを防ぐメカニズムはありません。
njsg

0

さまざまなブラウザで何度もテストを行った後、キーが押されていない(押されていない)ときにキーを傍受するほうが簡単です。

私はクロスブラウザ互換性のあるこのスクリプトを思い付きました(私はマイクロソフトのIEのためにテストしませんでした)。ブラウザはいくつかのキーに対して異なるコードを返すことに注意してください。私の場合はCtrl + Pを使わないようにしたかった。

クロムのキー「P」は e.keyCode == 80オペラでは e.charCode == 16Firefoxでは、それは e.charCode == 112

$(document).on('keydown', function(e) {
    if(e.ctrlKey && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
        alert("Please use the Print PDF button below for a better rendering on the document");
        e.cancelBubble = true;
        e.preventDefault();

        e.stopImmediatePropagation();
    }  
});

私はjQueryを使いました。


0

あなたがしたい場合は 無効にする どれか Ctrlキーが引き継がれている ウェブページで、a-zからすべての文字のコードをフィルタリングします。 (以前に承認された実用的な回答を基にしています)

// ==UserScript==
// @name           Disable Ctrl+key interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    //alert(e.keyCode ); //uncomment to find more keyCodes
    if( e.ctrlKey && e.keyCode>=65 && e.keyCode<=90 ) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
}, !window.opera);

-1

おそらく、あなたはそれらのプログラムの一つであるAutohotkeyやAutoitを使うことができ、もしあなたがホットキーコンボをしそしてそれらをFirefox機能にリンクすることができるなら、

Ctrl-; T 新しいタブへ

Ctrl-; N 新しいウィンドウに移動します。

AutohotkeyやAutoitの使い方がわからないので、他の人がこれが機能するかどうかを確認する必要があります。これは潜在的なアイデアとしてのみ提供します。


-2

Firefoxの現在のバージョンでは、コンテキストメニューをハイジャックするためにJavaScriptを無効にすることができます。

ツール/オプション/コンテンツ/ Javascriptを有効にする/コンテキストメニューを無効にするか置き換える

しかし、「JavaScriptを無効にしてキーボードショートカットをハイジャックする」という機能はありません。

ps。私はTwitterのウェブサイトを嫌い、そのキーボードショートカットは私のシステムベースのキーボードショートカットと競合します:J、K、L、私

私はbugzilla.mozilla.orgで機能要求をしました。そこにコメントしてください: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.