Как изменить сочетание клавиш для контекстного меню Firefox?

1398
ws_e_c421

Я пытаюсь изменить сочетание клавиш для отображения контекстного меню в Firefox (эквивалент нажатия Shift-F10в Linux или Windows или Control-Spaceв OS X). Кажется, что этот ярлык обрабатывается на другом уровне, чем обычные сочетания клавиш (он не отображается в расширении Keyconfig, которое позволяет переназначить большинство сочетаний клавиш).

Я попытался создать события клавиш и мыши, чтобы вызвать контекстное меню (используя следующий код, который сопоставлен с ярлыком с помощью Keyconfig), но они до сих пор не работали. Я не смог отследить, где в исходном коде Firefox обрабатывает сочетание клавиш для контекстного меню или есть ли одна функция, которую я мог бы вызвать, чтобы показать ее.

Событие мыши:

var focused = document.commandDispatcher.focusedElement; if(!focused) focused = document.commandDispatcher.focusedWindow.document.activeElement; var evt = document.createEvent("MouseEvents"); evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 2, null); focused.dispatchEvent(evt); 

Ключевое событие:

var focused = document.commandDispatcher.focusedElement; if(!focused) focused = document.commandDispatcher.focusedWindow.document.activeElement; var evt = document.createEvent("KeyboardEvent"); evt.initKeyEvent("keypress", true, true, null, false, false, true, false, 0x79, 0); focused.dispatchEvent(evt); 
1

2 ответа на вопрос

0
Sudhir Dudeja

я не эксперт, но вы пытались найти настройки в about: config?

если нет, то введите about: config в поле адреса и нажмите Enter, там вы найдете множество настроек и скажите мне, есть ли там какие-либо настройки или нет.

Спасибо за предложение. Я не нашел соответствующих настроек в `about: config`, но я проверил на компьютере, отличном от того, который я использовал изначально, когда задал вопрос, и обнаружил, что я действительно сделал такой ярлык в Keyconfig на этом компьютере (и Я только понял это, посмотрев в `about: config`). Из этого старого ярлыка я получил свой ответ. ws_e_c421 10 лет назад 0
0
ws_e_c421

Я обнаружил, что этот же вопрос был задан ранее на MozillaZine здесь . Это решение помещает контекстное меню в верхний левый угол экрана. Я попытался использовать решение, данное для этого другого вопроса о получении позиций экрана DOM, для создания кода ниже, который помещает контекстное меню ближе к активному элементу, но оно все еще глючит (иногда меню немного отличается от элемента):

var target = (document.commandDispatcher.focusedElement || document.commandDispatcher.focusedWindow.document.documentElement);  var screenX=0; var screenY=0; if ("boxObject" in target) { screenX=target.boxObject.x; screenY=target.boxObject.y; } else { var box; try { box = elem.getBoundingClientRect(); } catch(e) {}  // Make sure we're not dealing with a disconnected DOM node if (box) {  var body = document.body, clientTop = document.documentElement.clientTop || body.clientTop || 0, clientLeft = document.documentElement.clientLeft || body.clientLeft || 0, scrollTop = window.pageYOffset || body.scrollTop, scrollLeft = window.pageXOffset || body.scrollLeft, top = box.top + scrollTop - clientTop, left = box.left + scrollLeft - clientLeft; }  screenX=target.offsetLeft; screenY=target.offsetTop; }  var e = document.createEvent("MouseEvents"); e.initMouseEvent("contextmenu", true, false, null, 0, screenX, screenY, 0, 0, false, false, false, false, 0, null); target.dispatchEvent(e);