web-dev-qa-db-ja.com

アクセスしたページが選択したFirefoxショートカットキーを上書きしないようにするにはどうすればよいですか?

Firefoxで、キーごとにJavaScriptを使用してページがFirefoxの組み込みキーボードショートカットを上書きしないようにするにはどうすればよいですか?サイトごとにもできますか?最も苛立たしいオーバーライドは、「ページ内を検索」にリンクされているスラッシュ( '/')です。 Google検索結果、Twitterタイムライン、一部のWiki、その他のページなどのサイトは、独自の検索ボックスのスラッシュキーを盗みますが、これは完全に間違っています。

担当者は質問をしたり、編集したり、回答したりできますが、コメントを追加することはできないため、これは基本的に、適切に回答されなかった他の2つの質問の複製です:

キーボードのショートカットを上書きするためにWebサイトを停止する方法

Firefox:/(スラッシュ)キーを上書きすることをWebサイトに許可しない

43
Secure Shel

Edymttの回答に基づいて、特定のキーボードショートカットのみを無効にするユーザースクリプトを作成しました。 keycodes をkeycodes配列に追加することで無効にするショートカットをさらに追加したり、@include 1つ以上のパターンを持つタグ。

greasemonkey を使用してインストールします。

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

keycodes = [191] // Keycode for '/', add more keycodes to disable other key captures

document.addEventListener('keydown', function(e) {
//    alert(e.keyCode); //uncomment to find out the keycode for any given key
    if (keycodes.indexOf(e.keyCode) != -1)
    {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
});
12
MikeFHay

Firefox 58以降、Webサイトごとにキーボードショートカットのオーバーライドを無効にすることができます。

「キーボードショートカットの上書き」およびその他の多くの権限は、「ページ情報->権限」(URLバーの情報アイコンの下)で利用できます。

Firefox Permissions example for superuser.com

キーボードのオーバーライドはFirefox#380637で導入されました

10
Alec Istomin

Googleとクイック検索ショートカットに関しては、次のGreasemonkeyスクリプトをインストールできます。

http://userscripts-mirror.org/scripts/show/132237

説明が言うように、それは「Googleがすべてのキーを押すたびに検索入力に集中するのを止めます」-特に/他のWebサイトと同じように、キーボードフォーカスが検索ボックスの外側にあると、クイックファインドが表示されます。

私はコードに触れることなくそれをインストールしただけですが、他のサイトや他のショートカットで動作するように簡単に適応できると思います。

8
edymtt

以下はより一般的なスクリプトです。無効にするキープレスイベントをいくつでも定義できます。

https://greasyfork.org/en/scripts/5819-disable-website-keyboard-hooks

// ==UserScript==
// @name           Disable website keyboard hooks
// @description    Stop websites from hijacking keyboard shortcuts.
// @author         Isaac Levy
// @run-at         document-start
// @include        *
// @grant          none
// @version        0.0.1
// @namespace      https://isaacrlevy.com
// ==/UserScript==

var keycodes = [ // Add keycodes as desired, keep sorted.
    37, 38, 39, 40 // Arrow keys.
]

var meta_keycodes = [ // Disable these when meta key is pressed.
    70
];

// Don't change below this line.

var isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

// Create a fast lookup.
// This saves work during normal typing. Maybe unnecessary.
var keycode_offset = keycodes[0];
var keycode_arr = Array(keycodes[keycodes.length - 1] - keycode_offset)
for (var i = 0, len = keycodes.length; i < len; i++) {
    keycode_arr[keycodes[i] - keycode_offset] = true;
}

document.addEventListener('keydown', function(e) {
    //console.log(e);
    if ((isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
        if (meta_keycodes.indexOf(e.keyCode) >= 0) {
            e.stopImmediatePropagation();
        }
    } else if (keycode_arr[e.keyCode - keycode_offset]) {
        e.stopImmediatePropagation();
    }
    return false;
});
0
vackamole