Як я можу запобігти переходу на переглянуті сторінки, які я відвідую, на вибрані клавіші швидкого доступу Firefox?


40

Як у Firefox я можу не дозволити сторінкам переосмислювати вбудовані ярлики клавіш Firefox через Javascript на ключ? Переважно також на основі кожного сайту? Найбільше перекручує перекидання вперед ('/'), пов'язане з "Знайти на сторінці". Такі сайти, як результати пошуку Google, терміни Twitter, деякі вікі та інші сторінки крадуть клавішу косої риски для власних вікон пошуку, що абсолютно неправильно.

Оскільки мій представник дозволяє мені задавати, редагувати та відповідати на запитання, але не додавати коментарів, це, в основному, дублікат цих двох питань, на які не було відповідено належним чином:

Як зупинити веб-сайт для зміни переліку скорочень на клавіатурі

Firefox: не дозволяйте веб-сайтам змінювати клавішу / (косою рисою)


1
Мене засмучує PHPMyAdmin переосмислюючий ctrl- <ліва стрілка> ... це гарне питання
сильно нерегулярний

1
Я не витримую веб-сайтів, які перекривають поведінку за замовчуванням. Багато це роблять і з середніми клацаннями. Дивіться це пов'язане питання для вирішення цієї проблеми.
Cam Jackson

Відповіді:


12

Спираючись на відповідь Едімтта, я створив сценарій користувача, який відключає лише певні комбінації клавіш. Ви можете додати більше ярликів для відключення, додавши клавіші до масиву клавішних кодів, або обмежте, до яких сайтів застосувати його, замінивши @includeтег одним або кількома шаблонами.

Встановіть за допомогою жировика .

// ==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;
});

2
Дивовижно! Майже повне рішення для мета-клавіш - я також намагався не допустити перехоплення Документів Google від попередньої вкладки (Cmd + Left) та Next (Cmd + Right) і виявив, що мені також потрібно встановити useCapture на істинне; тобто, document.addEventListener ('keydown', yourHandlerFn, true)
chbrown

1
зауважте, що значення 191залежить від розкладки вашої клавіатури, що стосується моєї настройки azerty (у мене 16 + 58 для альфа-області та 111 для
numpad

2
і, на жаль, нині більше не працює (тестується на fabricator та twitter). запускається користувацький слухач, але подія сайту все одно запускається, а "пошук на сторінці" не відображається.
sylvainulg

1
@sylvainulg Я бачу, що це не працює в Twitter, але принаймні працює на GitHub. Цікаво, що змінилося.
бінкі

Це працює скрізь, я спробував це, крім php.net. Цікаво, яку подію вони використовують.
qwazix

8

Що стосується Google та швидкого пошуку, ви можете встановити цей скрипт Greasemonkey:

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

Як випливає з опису, це "зупиняє Google від фокусування вводу пошуку на кожному натисканні клавіші", зокрема, якщо натиснути /за допомогою фокусування клавіатури поза полем пошуку, з'явиться швидкий пошук, як і на інших веб-сайтах.

Я встановив його лише без торкання коду, але думаю, що його можна легко адаптувати для роботи з іншими сайтами та / або іншими ярликами.


Для уточнення: цей сценарій користувача зупиняє ВСІ комбінації клавіш на сторінках, для яких це включено, зберігаючи власну функціональність браузера. Щоб застосувати його до інших веб-сайтів, просто додайте більше тегів @include.
MikeFHay

без будь-якої інформації про те, що ховається за посиланням, відповідь, на жаль, марний, коли користувальницькі сценарії-mirror.org виходять з ладу, блокуються брандмауером чи іншим способом.
sylvainulg

8

Оскільки Firefox 58 можна відключити заміщення комбінацій клавіш на одному веб-сайті.

"Закрити комбінації клавіш" та багато інших дозволів доступні в "Інформація про сторінку -> Дозволи" (під значком інформації в рядку URL-адрес).

Приклад дозволів Firefox для superuser.com

Перезавантаження клавіатури було введено у Firefox # 380637


1
Так, через 11 років вони, нарешті, зробили півзахисну справу, щоб виправити цей квиток. На жаль, поточна реалізація (все ще знаходиться у FF 59) повністю вимикає клавіші Backspaceта Delete, що справді не вдається.
Ламбарт

6
Крім того, на жаль, це не заважає веб-сторінкам фіксувати не зміщений (тобто ні Ctrl, Shiftабо Altключ) вхід - це означає, що це зовсім не допомагає клавіші косої риски, зазначеної в оригінальному запитанні.
Ламбарт

@Lambart - добре знати, я теж не скористався цим, оскільки ярлики клавіатури firefox зафіксувались у джирі та злитті (десь навколо firefox 59)
Алек Істомін

2
що було виправлено? JIRA і Confluence як і раніше захоплюють всілякі клавіші, які постійно порушують мій робочий процес. Я вважаю це проблемою Атласіяна: їм потрібно дозволити людям відключати (та / або змінювати) свої "ярлики".
Ламбарт

світлячок bugzilla.mozilla.org/show_bug.cgi?id=1433592 фіксованою Atlassian продуктів для мене (можливо, було Atlassian виправлення в ті ж терміни)
Алек Істомін

0

Ось більш загальний сценарій - ви можете визначити будь-яку кількість подій натискання клавіш, які потрібно відключити.

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;
});

Мені шкода - але я не можу змусити це працювати. Особливо я хочу відключити клавіші зі стрілками вліво та вправо на сайті - але за допомогою цього сценарію клавіші зі стрілками все ще керують сайтом ???
Крістіан Геренц

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.