1

В Firefox некоторые веб-сайты и некоторые плагины, кажется, "захватывают" клавишу "управления", поэтому, когда я пытаюсь открыть новую вкладку с помощью Ctrl+t , ничего не происходит - или, что еще хуже, происходит что-то неожиданное.

Примеры:

  • На сайте Codecademy при редактировании кода Ctrl+t либо ничего не делает, либо переключает положение двух символов рядом с курсором.
  • При просмотре PDF-файлов с помощью плагина Adobe PDF Ctrl+t ничего не делает.

Есть ли способ отключить эту "функцию"? Я бы хотел, чтобы Ctrl+t всегда "разговаривал" с Firefox!

Изменить: я обнаружил, что мой вопрос очень похож на следующие вопросы:

Ответы на эти вопросы интересны и актуальны, но не дают способ отключить такие комбинации, как «Ctrl +t». Возможно, модифицированный скрипт Greasemonkey - самое простое решение.

Правка 2 - частичное решение Следующий пользовательский скрипт (правка: теперь ответ) был в основном скопирован / вставлен из StackExchange. Чтобы использовать его, вам необходимо установить GreaseMonkey. Скрипт успешно фиксирует Ctrl+t на некоторых сайтах, например, Google (появляется -> PopUp "Gotcha"), но не на сайте Codecademy.

Кроме того, я обнаружил еще один вопрос по этой теме: « Как запретить кражу сочетаний клавиш веб-сайтами в Firefox ». Он был поднят в 2010 году, и был достигнут консенсус: это невозможно сделать.

Редактировать 3 - заставил работать пользовательский скрипт. Я отредактировал пользовательский скрипт так, что теперь он успешно предотвращает перехват скриптов javascript от Ctrl+t , и благодаря JC2k8 я также нашел обходной путь для плагинов (который я еще не тестировал). Я объединил информацию и представил ответ - я подожду несколько дней и приму ответ с наибольшим количеством голосов.

3 ответа3

1

Как только плагины (Flash, Acrobat Reader, Quicktime,…) задействованы, вам не повезло. Mozilla всегда хотела исправить эту ошибку, "исправляя" API плагинов, чтобы позволить плагинам отправлять обратно "неиспользуемые" ключи, но из-за масштаба этой работы это никогда не делалось. Для продолжительной дискуссии по этому вопросу вы можете взглянуть на Bug 78414 в Bugzilla.

1

Для плагинов, перехватывающих нажатия клавиш: благодаря ответу JC2k8 я наткнулся на эту ссылку, где кто-то написал патч для перехвата "важных" нажатий клавиш перед их отправкой в процессы плагинов. Это довольно новое и все еще в оценке, но приятно видеть, что кто-то работает над этим. Я не проверял это, но это может решить проблему.

Для перехвата нажатий клавиш в Javascript: наконец-то мне удалось заставить мой скрипт работать, скомбинировав этот скрипт и этот скрипт. Я должен признать , что я не совсем уверен , как eventListener должен быть присоединен , и почему она не работала ранее (см старых версий мой вопрос , если вы заинтересованы). Во всяком случае, следующий скрипт работает по крайней мере на Firefox 17 ESR.

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

// Keycode for 't'. Add more to disable other ctrl+X interceptions
keycodes = [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);
1

Вы можете перехватить последовательность клавиш Ctrl-T на уровне операционной системы и передать ее в Firefox.

Например, вы можете использовать AutoHotKey для прослушивания Ctrl-T и выполнить команду

"C:\Program Files\Mozilla Firefox\firefox.exe" -new-tab about:newtab

Замените about:newtab реальным URL веб-страницы, если вы предпочитаете. Это открывает новую вкладку в существующем экземпляре Firefox. Вы должны быть в состоянии перехватить последовательность только тогда, когда у ff есть фокус, но все же перехватите ее до того, как javascript ее получит.

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