2010-05-30 2 views
3

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

В Firefox 3.6.3 на Mac OS X 10.5.8 при вводе текста в стандартной комбинации клавиш Command + из LeftArrow и Command + Rightarrow переместите курсор на начало/конец текущей строки, соответственно. Однако при использовании 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); 
    } 
} 

}, ложные );

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

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

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

+0

Я пробовал несколько раз, но по какой-то причине весь фрагмент кода выше не останется в выделенной области кода. Если вы скопируете это, убедитесь, что вы получили последний «}, false); часть. –

ответ

2

Добавить return false; после alert(kCode); Это должно делать это большую часть времени.

Может также добавить:

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

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

+0

evt.preventDefault(); понял. Он действительно отключает курсор, но я все в порядке. Я бы предпочел сделать это вручную, чем риск потерять данные. Полный код: document.addEventListener ('нажатие клавиши', функция (ЭВТ) { // захватить мета ключ вар isCmd = evt.metaKey; // проверить, чтобы увидеть, если она нажата если (isCmd) { // если да, то возьмите код ключа; вар kCode = evt.keyCode; // увидеть, если он влево или стрелка вправо ключ если (kCode == 37 || kCode == 39) { // предотвращаем увольнение по умолчанию, если оно есть. evt.preventDefault(); } } }, false ); –