1

Я пытаюсь изменить сочетание клавиш для отображения контекстного меню в 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 ответа2

0

Я обнаружил, что этот же вопрос был задан ранее на 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);
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .