Как запретить посещенным страницам перекрывать выбранные сочетания клавиш Firefox?
В Firefox, как я могу запретить страницам переопределять встроенные сочетания клавиш Firefox через Javascript для каждой клавиши? Желательно для каждого сайта тоже? Самое неприятное переопределение - это косая черта ('/'), которая связана с "Найти на странице". Такие сайты, как результаты поиска Google, временные рамки Twitter, некоторые вики и другие страницы, крадут ключ слеша для своих собственных окон поиска, что совершенно неверно.
Поскольку мой представитель позволяет мне задавать, редактировать и отвечать на вопросы, но не добавлять комментарии, это в основном дубликат этих двух других вопросов, на которые не был дан правильный ответ:
Как остановить веб-сайт для переопределения моих сочетаний клавиш
Firefox: не разрешать веб-сайтам переопределять ключ / (косая черта)
5 ответов
Основываясь на ответе edymtt, я создал пользовательский скрипт, который отключает только определенные сочетания клавиш. Вы можете добавить дополнительные ярлыки для отключения, добавив коды ключей в массив ключей, или ограничить сайты, к которым они применяются, заменив @include
тег с одним или несколькими шаблонами.
Установите с помощью 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;
});
Начиная с Firefox 58 можно отключить переопределение сочетаний клавиш для каждого веб-сайта.
"Переопределить сочетания клавиш" и многие другие разрешения доступны в "Информация о странице -> Разрешения" (под значком информации в строке URL-адреса).
Что касается Google и ярлыка быстрого поиска, вы можете установить этот скрипт Greasemonkey:
http://userscripts-mirror.org/scripts/show/132237
Как говорится в описании, он "мешает Google сфокусировать поисковый ввод при каждом нажатии клавиши" - в частности, если вы нажмете /
с фокусом клавиатуры вне поля поиска появится Быстрый поиск, как и на других веб-сайтах.
Я только установил его, не касаясь кода, но я думаю, что он может быть легко адаптирован для работы с другими сайтами и / или другими ярлыками.
Вот более общий сценарий - вы можете определить любое количество событий нажатия клавиш для отключения.
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;
});
Надстройка YesScript стала для меня беспроблемным решением. Это предотвращает запуск сайтов на JavaScript, но только на выбранных вами сайтах. В большинстве случаев эти сайты перехватывают сочетания клавиш с помощью JavaScript. Я узнал об этом в форме статьи Ghacks.net.