Jak mogę uniemożliwić odwiedzanym stronom przesłonięcie wybranych skrótów Firefox?

39

W jaki sposób mogę uniemożliwić stronom przesłonięcie wbudowanych Firefoksa skrótów klawiaturowych w przeglądarce JavaScript dla poszczególnych klawiszy? Czy najlepiej też dla poszczególnych witryn? Najbardziej frustrującym przesłonięciem jest ukośnik („/”) połączony z „Znajdź na stronie”. Strony takie jak wyniki wyszukiwania Google, oś czasu na Twitterze, niektóre strony wiki i inne strony kradną ukośnik dla własnych pól wyszukiwania, co jest całkowicie błędne.

Ponieważ mój przedstawiciel pozwala mi zadawać, edytować i odpowiadać na pytania, ale nie dodawać komentarzy, jest to w zasadzie duplikat pozostałych dwóch pytań, na które nie udzielono prawidłowej odpowiedzi:

Jak zatrzymać stronę internetową, która zastąpi moje skróty klawiaturowe

Firefox: nie zezwalaj stronom internetowym na zastępowanie klawisza / (ukośnik)

Secure Shel
źródło
1
Czuję się sfrustrowany tym, że PHPMyAdmin zastępuje ctrl- <strzałka w lewo> ... to dobre pytanie
wysoce nieregularna
1
Nie mogę znieść witryn, które zastępują domyślne zachowanie. Wiele robi to również za pomocą środkowych kliknięć. Zobacz to powiązane pytanie, aby znaleźć rozwiązanie tego problemu.
Cam Jackson

Odpowiedzi:

11

Opierając się na odpowiedzi edymtta, stworzyłem skrypt użytkownika, który wyłącza tylko określone skróty klawiaturowe. Możesz dodać więcej skrótów, aby wyłączyć, dodając kody kluczy do tablicy klawiszy lub ograniczyć, do których witryn chcesz go zastosować, zastępując @includeznacznik jednym lub kilkoma wzorami.

Zainstaluj za pomocą 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;
});
MikeFHay
źródło
2
Niesamowite! Prawie kompletne rozwiązanie również dla meta-kluczy --- Próbowałem powstrzymać Dokumenty Google przed przechwyceniem Poprzedniej karty (Cmd + Lewy) i Następnej karty (Cmd + Prawa) i stwierdziłem, że muszę również ustawić wartość useCapture na true; tj. document.addEventListener ('keydown', yourHandlerFn, true)
chbrown
1
zwróć uwagę, że wartość 191zależy od układu klawiatury, jeśli chodzi o moją konfigurację azerty (mam 16 + 58 dla obszaru alfa i 111 dla
numpada
2
i niestety już nie działa (testowane na fabrykatorze i Twitterze). niestandardowy program nasłuchujący jest wyzwalany, ale zdarzenie witryny jest i tak uruchamiane, a „wyszukiwanie na stronie” nie jest wyświetlane.
sylvainulg
1
@sylvainulg Widzę, że to nie działa na Twitterze, ale przynajmniej działa na GitHub. Zastanawiam się, co się zmieniło.
binki
Działa to wszędzie, gdzie próbowałem, oprócz php.net. Zastanawiam się, jakiego zdarzenia używają.
qwazix,
8

W odniesieniu do Google i skrótu Szybkie wyszukiwanie możesz zainstalować ten skrypt Greasemonkey:

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

Jak napisano w opisie, „przestaje on wyszukiwać w wyszukiwarce Google po każdym naciśnięciu klawisza” - w szczególności, jeśli naciśniesz /klawiaturę poza polem wyszukiwania, pojawi się Szybkie wyszukiwanie, podobnie jak na innych stronach internetowych.

Zainstalowałem go tylko bez dotykania kodu, ale myślę, że można go łatwo dostosować do pracy z innymi witrynami i / lub innymi skrótami.

edymtt
źródło
Aby wyjaśnić: ten skrypt użytkownika zatrzymuje WSZYSTKIE skróty klawiaturowe na stronach, dla których jest włączony, zachowując własną funkcjonalność przeglądarki. Aby zastosować go do innych witryn, po prostu dodaj więcej tagów @include.
MikeFHay
bez żadnych informacji na temat tego, co kryje się za linkiem, odpowiedź jest niestety bezużyteczna, gdy użytkownik scripts-mirror.org ulegnie awarii, zostanie zablokowany przez zaporę ogniową lub cokolwiek innego.
sylvainulg
7

Od Firefoksa 58 można wyłączyć zastępowanie skrótów klawiaturowych dla poszczególnych stron internetowych.

„Zastąp skróty klawiaturowe” i wiele innych uprawnień dostępnych jest w „Informacje o stronie -> Uprawnienia” (pod ikoną informacyjną na pasku adresu URL).

Przykład uprawnień Firefoksa dla superuser.com

Zastąpienie klawiatury zostało wprowadzone w Firefox # 380637

Alec Istomin
źródło
Tak, po 11 latach w końcu wykonali półnaturalną robotę naprawienia tego biletu. Niestety obecna implementacja (wciąż w FF 59) całkowicie wyłącza klawisze Backspacei Delete, co naprawdę jest do kitu.
Lambart
6
Niestety, nie uniemożliwia to stronom internetowym przechwytywania nieprzesuniętych danych wejściowych (tzn. Nie Ctrl, Shiftlub Altklucza) - co oznacza, że ​​nie pomaga to wcale w przypadku klucza ukośnika wspomnianego w pierwotnym pytaniu.
Lambart
@Lambart - dobrze wiedzieć, że też tego nie używałem, ponieważ skróty klawiaturowe Firefoksa zostały naprawione w Jira i zbiegu (gdzieś w pobliżu Firefoksa 59)
Alec Istomin
2
co zostało naprawione? JIRA i Confluence nadal chwytają wszystkie rodzaje kluczy, które nieustannie zakłócają mój przepływ pracy. Widzę to jako problem Atlassiana: muszą pozwolić ludziom na wyłączenie (i / lub zmianę) swoich „skrótów”.
Lambart
firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592 naprawiono dla mnie produkty atlassian (być może w tym samym czasie były poprawki atlassian)
Alec Istomin
0

Oto bardziej ogólny skrypt - możesz zdefiniować dowolną liczbę zdarzeń naciskania klawiszy w celu wyłączenia.

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;
});
wackamole
źródło
Przepraszam - ale nie mogę tego uruchomić. Szczególnie chcę wyłączyć klawisze strzałek w lewo i w prawo na stronie - ale za pomocą tego skryptu klawisze strzałek nadal kontrolują witrynę ???
Christian Herenz,
-3

Dodatek YesScript był dla mnie bezproblemowym rozwiązaniem. Zapobiega uruchamianiu skryptów JavaScript w witrynach, ale tylko w wybranych witrynach. Najczęściej witryny te przejmują skrót klawiaturowy przez JavaScript. Znalazłem o tym w tym artykule z Ghacks.net.

Bracia Phoenix
źródło