web-dev-qa-db-ja.com

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

多くのWebサイト、特にリッチテキスト編集に関連するすべてのもの(このサイトも同様に有罪)は、Firefoxを制御するために通常使用されるキーボードショートカットを盗み、代わりに何か他のことをさせます。 Cmd-number、Cmd-L、Cmd-T、またはCmd-Kのようなものを押すと、それは完全に腹立たしく、それは私が望んでいることをしません。止めてもいいですか?

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

60
taw

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);
24
Martin J.H.

バグが報告されてから11年後、Mozillaはようやくこの人気のある機能リクエストに対応できるようになり、現在は正常に機能しているようです(Firefox 66.0.3/Ubuntuでテスト済み)。

(FF 59以降、設定を見つけるのがはるかに困難になったことを指摘してくれた@PerJohanssonに感謝します。)

次の手順に従って、サイトのショートカットを無効にすることができます。

  1. ロケーションバーの(i)アイコンをクリックします
  2. 「接続」ステータス項目の右側にある小さな矢印(>)をクリックします。
  3. これで、下部にMore Informationが表示されます。それをクリックすると、最後にPage Infoダイアログが表示されます。
  4. 最後に、Permissionsタブに移動し、Override Keyboard Shortcuts設定を調整します。

以下は、各ステップの最近(2019年5月)のスクリーンショットです。

Firefox Site Info dialog screen shot

Firefox Site Security dialog screen shot

Firefox Permissions tab screen shot

この修正の履歴に興味がある場合は、関連するMozillaチケットを以下に示します。 https://bugzilla.mozilla.org/show_bug.cgi?id=380637 および https: //bugzilla.mozilla.org/show_bug.cgi?id=1445942

10
Lambart

広範な調査によると、Firefoxの現在のバージョン(3.6.x)では、これは不可能です。すべてのキーバインディングの競合は優先度で解決されます:システム>ウェブサイト> Firefox-かなり愚かな順序です。私が試したアドオンはどれもそれを修正できるようには見えません。

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

5
taw

問題はキー入力を盗むJavaScriptキーボードイベントのようですので、nbindsこれらのすべてのキーボードイベントであるJavaScriptスクリプトを作成して、それぞれの適切な使用法を返すことはできませんか?ブラウザへのショートカット?

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

5
DMA57361

問題は、どのページでもキープレスイベントを取得するイベントハンドラーを設定するJavascriptを実行できることです。FirefoxのJavaScriptコントロールは、他のJavaScript機能を壊さずにそれを停止するのに十分な粒度ではありません。

これを防ぐ唯一の方法は、Javascriptを無効にすることです([ツール]-> [オプション]、[コンテンツ]タブで、JavaScriptを有効にする)をオフにします)。または、NoScriptなどの拡張機能を使用して、サイトごとにJavaScriptを無効にすることもできます。

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

たぶん、このレベルの制御を提供する拡張機能があるでしょう-私はそれを知りません。
Javascriptオプション がありますが、その拡張機能は更新されていません。

4
njd

さまざまなブラウザで多くのテストを行った後、この「アプリ統合キー」の一部は「keypress」イベントをインターセプトすることが難しいため、キーが押されていない(押されていない)ときにキーをインターセプトする方が簡単です。

ブラウザー間で互換性のあるこのスクリプトを思いつきました(MicrosoftのIEについてはテストしていません)。一部のキーに対してブラウザが異なるコードを返すことに注意してください。私の場合、Ctrl + Pを使用しないようにしました。

chromeのキー「P」はe.keyCode == 80、オペラではe.charCode == 16、Firefoxでは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
Peter

Webページでdisableanyctrl-keyが引き継がれているにしたい場合は、すべての文字のコードをaz(以前に受け入れられて機能する答えに基づいて構築)

// ==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);
0
Steve Horvath

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

0
Daisetsu