Как изменить сочетание клавиш для контекстного меню Firefox?
Я пытаюсь изменить сочетание клавиш для отображения контекстного меню в 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);
2 ответа
Я обнаружил, что этот же вопрос был задан ранее на 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);
Я не эксперт, но вы пытались найти настройки в about:config?
если нет, то введите about: config в поле местоположения и нажмите Enter, там вы найдете множество настроек и скажите мне, есть ли там какие-либо настройки или нет.