51

Многие веб-сайты, особенно все, что связано с редактированием текста (этот сайт также виновен), крадут сочетания клавиш, обычно используемые для управления Firefox, и заставляют их делать что-то еще. Это полностью бесит, когда я нажимаю что-то вроде Cmd-номера, Cmd-L, Cmd-T или Cmd-K, и это не делает то, что я хочу. Могу ли я сделать это остановить?

На самом деле, было бы лучше, если бы я мог запретить кражу всех сочетаний клавиш Cmd- *. Я никогда не видел, чтобы они использовали что-то полезное. Является ли это возможным?

10 ответов10

21

Благодаря новому свойству @run-at от Greasemonkey это стало возможным!

Я черпал вдохновение из этого сценария и этого сценария, чтобы объединить их в пользовательский сценарий, который успешно перехватывает сочетания клавиш 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);
5

Поскольку проблемы, по-видимому, связаны с событиями клавиатуры JavaScript, которые крадут нажатия клавиш, не будет ли возможно создать сценарий JavaScript (который будет использоваться через Greasemonkey), который отменяет привязку всех этих событий клавиатуры, возвращая таким образом правильное использование каждого ярлыка для браузера?

Я не уверен, насколько это возможно, но кто-то с большим опытом JavaScript / Greasemonkey может помочь (возможно, стоит спросить о SO).

4

Проблема заключается в том, что на любой странице может быть запущен Javascript, который устанавливает обработчик событий для захвата событий нажатия клавиш, а элементы управления Firefox javascript недостаточно детализированы, чтобы остановить его, не нарушая другие функции javascript.

Единственный способ предотвратить это - отключить Javascript (Инструменты -> Параметры, вкладка [Содержимое], снимите флажок Включить JavaScript). Или вы можете отключить Javascript для каждого сайта с таким расширением, как NoScript.

Firefox позволяет предотвращать некоторые виды использования Javascript, такие как перемещение / изменение размеров окон, изменение или отключение контекстного меню и т. Д .; но ничто не мешает веб-сайтам перехватывать события клавиатуры.

Возможно есть расширение, которое дает этот уровень контроля - я не знаю ни одного.
Есть опции Javascript, но это расширение больше не обновляется.

4

Обширные исследования показывают, что в текущей версии Firefox (3.6.x) это невозможно - все конфликты связывания ключей разрешаются с приоритетами: Система> Веб-сайт> Firefox - довольно глупый порядок. Кажется, ни один из аддонов, которые я пробовал, не может это исправить.

Возможно, это станет возможным в будущих версиях, но прямо сейчас ответ - невозможно.

3

Спустя 11 лет после того, как ошибка была обнаружена, Mozilla, наконец, начала предпринимать действия по адресу https://bugzilla.mozilla.org/show_bug.cgi?id=380637, которая напрямую решает эту проблему.

В текущих версиях Firefox (я использую v.59) есть новое предпочтение для каждого сайта, но, к сожалению, оно все еще проблематично (как обсуждалось в последних комментариях к сообщению об ошибке) в v.64: это предотвращает Backspace и Del ключи от работы в самом браузере (например, для редактирования введенного текста), который, скорее всего, будет нарушать договоренности для большинства людей.

Обновление: это ошибка https://bugzilla.mozilla.org/show_bug.cgi?id=1445942, которая предположительно была исправлена на прошлой неделе. Надеюсь, исправление появится в FF 65.

Но вы можете поэкспериментировать с текущей реализацией (и, надеюсь, получить доступ к фиксированной версии в Firefox 65), щелкнув значок (i) панели местоположения (или нажав Ctrl-I, предполагая, что вы не находитесь на таком сайте, как переполнение стека). это угнало этот ярлык), затем щелкает стрелку в кажущемся не связанным пункте меню « Connection > .

(Спасибо @PerJohansson за то, что они указали, что они сделали этот параметр намного сложнее, начиная с v.59.)

Теперь вы должны увидеть "Больше информации" внизу. Нажмите на нее, и вы, наконец, перейдете в диалоговое окно Page Info . Теперь перейдите на вкладку Permissions и отрегулируйте настройку Override Keyboard Shortcuts`:

Скриншот Firefox

Но с безответственными приложениями (я смотрю на тебя, Atlassian), берущими на себя твою клавиатуру без вопросов, я все еще нахожу это полезным. Я бы предпочел использовать, например, мои PageUp/PageDown и клавиши курсора для навигации по JIRA, как если бы это было удобное и удобное приложение. Немного сводит с ума, но не так сложно кратко разблокировать ярлыки для сайта, когда мне нужно написать /отредактировать комментарий.

0

После многочисленных испытаний в различных браузерах легче перехватывать клавиши, когда они нажаты (не нажаты), потому что некоторые из этих "встроенных в приложение клавиш" трудно перехватить с помощью события "нажатие клавиши".

Я придумал этот скрипт, совместимый с несколькими браузерами (я не тестировал IE для Microsoft). Обратите внимание, что браузеры возвращают разные коды для некоторых ключей. В моем случае я хотел предотвратить Ctrl+P.

Клавиша "P" в chrome выглядит как 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

Если вы хотите отключить любую клавишу ctrl, которая перехватывается веб-страницей, просто отфильтруйте все коды букв из 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

Вероятно, что сторонние плагины фокусируются на главном окне браузера. В этом случае ввод с клавиатуры (кроме прерываний) будет перехвачен плагином. Если вам это не нравится, вы всегда можете удалить нарушающий плагин (ы) [я бы предположил, что это, вероятно, флэш].

-1

Возможно, вы можете использовать Autohotkey или Autoit, одну из этих программ, и если вы можете делать комбинации горячих клавиш и связывать их с функциями Firefox, скажем,

Ctrl-; T на новую вкладку

Ctrl-; N в новое окно и так далее.

Я не знаю, как использовать Autohotkey или Autoit, поэтому кто-то еще должен будет проверить, что это может работать, я предлагаю это только как потенциальную идею.

-2

Текущая версия Firefox позволяет нам "отключить контекстное меню javascript to hijack":

Инструменты / Параметры / Содержание / Включить Javascript Advanced / Отключить или заменить контекстные меню

Но нет функции «отключить JavaScript, чтобы угнать горячие клавиши».

пс. Я ненавижу твиттер-сайт, его сочетания клавиш конфликтуют с моими системными сочетаниями клавиш: J, K, L, I

Я сделал запрос на функцию bugzilla.mozilla.org, пожалуйста, оставьте комментарий здесь:https://bugzilla.mozilla.org/show_bug.cgi?id=775002

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .