Отменить горячие клавиши перемотки страницы вперед/назад в Firefox с помощью Greasemonkey

Сначала фон:

В Firefox 3.6.3 на Mac OS X 10.5.8 при вводе текста в стандартном режиме комбинация горячих клавиш Command+Стрелка влево и Command+Стрелка вправо перемещает курсор в начало/конец текущей строки соответственно. Однако при использовании CKEditor, FCKEditor и YUI Editor Firefox, похоже, не полностью распознает, что это текстовая область. Вместо этого он возвращается к функции по умолчанию для тех горячих клавиш, которые предназначены для перемещения назад/вперед в истории браузера. После этого текст в редакторе также очищается, когда вы возвращаетесь на страницу, что позволяет очень легко потерять все, над чем вы работаете.

Я пытаюсь написать скрипт Greasemonkey, который я могу использовать для захвата событий и предотвращения выполнения переходов на страницу вперед/назад. До сих пор я мог видеть события со следующим, используемым в качестве сценария .user.js в GreaseMonkey:

document.addEventListener('keypress', function (evt) {
// grab the meta key
var isCmd = evt.metaKey;

// check to see if it is pressed
if(isCmd)
{
  // if so, grab the key code;
  var kCode = evt.keyCode;

  if(kCode == 37 || kCode == 39)
  {
    alert(kCode);
  }
}

}, ложный );

Когда он установлен/включен, нажатие клавиши command+стрелка влево|вправо вызывает предупреждение с соответствующим кодом, но как только диалоговое окно закрывается, браузер выполняет перемещение страницы вперед/назад. Я попытался установить новый код с evt.keyCode = 0, но это не сработало.

Итак, вопрос в том, можно ли обновить этот скрипт Greasemonkey, чтобы он предотвращал перемещение страниц назад/вперед?

(ПРИМЕЧАНИЕ: я также открыт для других решений. Это не обязательно должен быть Greasemonkey, это просто направление, которое я пробовал. Настоящая цель — отключить функцию горячих клавиш вперед/назад.)


person Alan W. Smith    schedule 30.05.2010    source источник
comment
Я пробовал несколько раз, но по какой-то причине весь приведенный выше фрагмент кода не остается в выделенной области кода. Если вы скопируете это, убедитесь, что вы получили последний }, false ); часть.   -  person Alan W. Smith    schedule 30.05.2010


Ответы (1)


Добавьте return false; после alert(kCode); Так должно быть в большинстве случаев.

Возможно, также придется добавить:

evt.preventDefault();
and/or
evt.stopPropagation();

Эти две функции работают на большинстве выпусков FF, но я не уверен насчет Mac. Кроме того, обычно ваша функция срабатывает после сценария редактора. Но, если он сработает раньше, он может отключить этот переход курсора.

person Brock Adams    schedule 30.05.2010
comment
evt.preventDefault(); понятно. Это действительно отключает прыжок курсора, но меня это устраивает. Я бы предпочел сделать это вручную, чем рисковать потерей данных. Полный код: document.addEventListener('keypress', function (evt) { // получаем метаключ var isCmd = evt.metaKey; // проверяем, нажата ли клавиша if(isCmd) { // если да, захватываем код клавиши; var kCode = evt.keyCode; // смотрим, это клавиша со стрелкой влево или вправо if(kCode == 37 || kCode == 39) { // предотвращаем срабатывание по умолчанию, если это так. evt.preventDefault( ); } } }, ложный ); - person Alan W. Smith; 30.05.2010