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


57

Багато веб-сайтів, особливо все, що стосується редагування багатого тексту (також цей сайт винен), крадуть комбінації клавіш, які зазвичай використовуються для управління Firefox і змушують їх робити щось інше. Це повністю розлючує, коли я натискаю щось на кшталт Cmd-числа, Cmd-L, Cmd-T або Cmd-K, і це не робить те, що я хочу. Чи можу я змусити його зупинитися?

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


4
Домовились, це шалено. FogBugz має дуже гарну реалізацію комбінацій клавіш. CTRL-;переходить у режим ярлика та виділяє всі команди, видимі на екрані, за допомогою доступних ярликів. Кожен ярлик є комбінованим, тому новий випадок є CTRL-; Nта редагування CTRL-; E. Дуже легко звикнути і нульових конфліктів. Я хотів би, щоб більше сайтів використовували щось подібне, тому що користувачеві це простіше і не перекриває ярлики браузера. Дуже погано SuperUser не робить цього, оскільки це від тих же людей, що і FogBugz.
Сем



Я відвідую багато інтранет-сторінок на роботі, які якимось чином псують cmd + N, тому я ніколи не можу відкривати нові вікна браузера з клавіатури! Так дратує!
Ніколас Міарі

1
Через ~ 12 років Mozilla стабілізував досить розумне рішення. Це добре приховано і недосконало, але це може врятувати ваш розум. Будь ласка, дивіться мою відповідь тут: superuser.com/a/1317514/158390
Lambart

Відповіді:


24

Завдяки новій @run-atвласності Greasemonkey , це зараз можливо!

Я взяв натхнення від цього сценарію та цього сценарію, щоб об'єднати їх у Usercript, який успішно перехоплює комбінації клавіш 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);

1
Це було дуже корисно. Користувачі OS X повинні поміняти e.ctrlKeyдля e.cmdKeyі e.cmdKey && e.shiftKeyповернути велику частину своїх ярликів браузера.
JamesGecko

Цей скрипт працює для того, щоб виправити CTRL + TAB, додавши 9до масиву ключових кодів. Дякую!
Майк Мюллер

@JamesGecko Дізнавшись за допомогою цієї відповіді, ви повинні / могли використовувати e.metaKey для командного ключа.
riezebosch

3
Цей код працює! Майте на увазі, що він фільтрує не лише Ctrl + Key, але й Ctrl + Alt + Key, Ctrl + Shift + Key та Ctrl + Alt + Shift + Key, оскільки він перевіряє лише стан модифікатора Ctrl.
RomanSt

Перше питання: для сценарію, за яким вважають, що він працює на Firefox, чому він перевіряє, чи переглядає браузер Opera? І друге питання: коментар говорить про коди символів для 's' і 't', але коди дійсно для 'S' і 'T'. Чи потрібно мені чомусь вказати прописний код? Дякую.
Дуглас Холд

8

Через 11 років після подання помилки Mozilla нарешті приступив до роботи над цим популярним запитом на функцію, і, здається, зараз він працює нормально (перевірено у Firefox 66.0.3 / Ubuntu).

(Дякуємо @PerJohansson за те, що вони вказали, що вони зробили налаштування набагато складніше з FF 59.)

Ви можете вимкнути ярлики сайту, виконавши наступні дії:

  1. Клацніть (i)піктограму в панелі розташування
  2. Клацніть невелику стрілку ( >) праворуч від елемента стану "З'єднання".
  3. Тепер ви повинні побачити More Informationвнизу. Клацніть це, і ви нарешті перейдете до Page Infoдіалогового вікна.
  4. Нарешті, перейдіть на Permissionsвкладку і відрегулюйте Override Keyboard Shortcutsналаштування.

Ось декілька останніх (травень 2019 року) екранів для кожного кроку:

Знімок діалогового екрана інформації про сайт Firefox

Знімок діалогового екрана безпеки сайту Firefox

Знімок екрана вкладки Дозвіл Firefox

Якщо вас цікавить історія цього виправлення, ось відповідні квитки Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 та https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942


2
У Firefox 64 (не знаєте, де він з'явився), ви повинні натиснути "З'єднання" => "Додаткова інформація", щоб отримати доступ до цього idalog box. Шестірня дозволів переходить у Налаштування, натомість це не потрібне місце.
Пер Йоханссон

Дякую @PerJohansson, я оновив квиток.
Ламбарт

Який about:configваріант змінити за замовчуванням? Я хочу змусити всі сайти не мати можливості зачепитися за мою клавіатуру
inetknght

5

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

Можливо, це стане можливим у наступних версіях, але зараз відповідь - Неможливо.


1
Використання FF 30.0 майже через 4 роки, і це все ще залишається проблемою. Я спробую ідею Мартіна Greasemonkey.
LGT

2
Використання FF 53.0 майже через 8 років, і це все ще залишається проблемою.
Даніель

5

Оскільки проблеми, здається, є подіями клавіатури JavaScript, що крадуть натискання клавіш, чи не вдасться створити сценарій JavaScript (який використовується через Greasemonkey), який би розв’язував ці всі події клавіатури, повертаючи таким чином належне використання кожної ярлика у браузері?

Я не впевнений, наскільки це можливо, але хтось із більшим досвідом JavaScript / Greasemonkey може допомогти (можливо, варто звернутися до ТА).


2
Це працює за допомогою механізму onKeyPress - Firefox спочатку надсилає кожне натискання клавіш на веб-сайт і лише після цього переглядає його, якщо воно не було скасовано чи перехоплене. Можливо, є якась магія Greasemonkey, яка перехоплює натискання клавіш перед веб-сайтом і якось безпосередньо виконує функції Firefox, але це далеко не очевидно.
тав

4

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

Єдиний спосіб запобігти цьому - відключити Javascript (Інструменти -> Параметри, вкладка [Зміст], зніміть прапорець Увімкнути JavaScript ). Або ви можете відключити Javascript на основі сайту з таким розширенням, як NoScript.

Firefox дозволяє запобігти певному використанню Javascript, наприклад переміщенню / зміні розміру Windows, зміні або відключенню контекстного меню тощо; але нічого не заважає веб-сайтам перехоплювати події на клавіатурі.

Можливо, є розширення, яке дає цей рівень контролю - я цього не знаю.
Там немає опції Javascript , але це розширення більше не оновлюється.


2
Параметри Javascript та кілька інших розширень, які я спробував, не підтримують це. Блокування всіх javascript зробить Інтернет дуже непридатним, це насправді не варіант.
тав

0

Цілком ймовірно, що додатки сторонніх розробників зосереджують увагу в головному вікні браузера. У такому випадку плагін вхопить клавіатуру (крім переривань). Якщо вам це не подобається, ви завжди можете видалити плагіни, які ображають вас [я вважаю, що це, ймовірно, спалах].


3
Flash це теж робить, але звичайний Javascript може вкрасти ярлики. Почніть тут нове запитання та натисніть Cmd-L (Ctrl-L для не-Macs), перебуваючи у вікні тексту запитання. Замість того, щоб перейти на панель URL як слід, ярлик буде вкрадений, і ви побачите деяке діалогове діалогове вікно гіперпосилання. Раніше це було рідко, але недавно занадто багато веб-сайтів почали це робити.
тав

Я просто спробував це на Windows 7 під управлінням Firefox, і я перестрибнув прямо в адресний рядок, як це зазвичай робиться.
Daisetsu

Вибачте, мені не було зрозуміло - це відбувається лише тоді, коли вибрано діалогове вікно з розширеним текстовим полем. Ти це робив? Я випробував на OSX з Firefox, Opera, Safari та Chrome. У всіх чотирьох звичайно Cmd-L стрибає на панель url (а Ctrl-L нічого не робить). Під час редагування тіла запиту на Cmd-L та Ctrl-L відображається діалогове вікно гіперпосилання.
тав

Схоже, ти маєш рацію. Я поняття не маю, як це запобігти. :( Це цікаве питання зараз, тому я підтримую ваше запитання. Якщо ніхто не відповість на нього, я кину на нього щедрість.
Daisetsu

Проблема не в плагінах. Плагіни - окрема проблема сама по собі. І інша проблема, зрештою. У плагінах весь фокус викрадений плагіном, оскільки це окрема сутність. За допомогою JavaScript, інтерфейс firefox - це JavaScript і має свої прив’язки, але сайти можуть визначати прив’язки, що знаходяться на одному рівні. Поки ще не існує механізму, який би цьому запобігав.
njsg

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

-1

Можливо, ви можете використовувати Autohotkey або Autoit, одну з цих програм, і якщо ви можете робити комбінації клавіш швидкої клавіші та пов’язати їх з функціями firefox, скажімо

Ctrl-; T до нової вкладки

Ctrl-; N до нового вікна тощо.

Я не знаю, як використовувати Autohotkey або Autoit, тому хтось інший повинен буде перевірити, що це може спрацювати, я пропоную це лише як потенційна ідея.


-2

Поточна версія Firefox дозволяє нам "відключити javascript для контекстного меню викрадення":

Інструменти / Параметри / Зміст / Увімкнути розширене / вимкнення JavaScript, вимкнути або замінити контекстні меню

Але немає функції "відключити javascript для викрадення комбінацій клавіш".

пс. Я ненавиджу веб-сайт twitter, його комбінації клавіш суперечать моїм клавіатурним комбінаціям клавіш: J, K, L, I

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

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