Como alterar o atalho de teclado para o menu de contexto do Firefox?

1

Estou tentando alterar o atalho de teclado para mostrar o menu de contexto no Firefox (o equivalente a pressionar Shift-F10 no Linux ou Windows ou Control-Space no OS X). Parece que esse atalho é tratado em um nível diferente dos atalhos de teclado normais (ele não aparece na extensão do Keyconfig que permite o remapeamento da maioria dos atalhos de teclado).

Eu tentei criar eventos de chave e mouse para acionar o menu de contexto (usando o código a seguir mapeado para um atalho com Keyconfig), mas eles não funcionaram até agora. Eu não fui capaz de rastrear onde no código-fonte o Firefox lida com o atalho de teclado para o menu de contexto ou se há uma única função que eu poderia chamar para mostrá-lo.

Evento do mouse:

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);

Evento-chave:

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);
    
por ws_e_c421 21.02.2014 / 18:08

2 respostas

0

Descobri que essa mesma pergunta tinha sido perguntada anteriormente na MozillaZine aqui . Essa solução coloca o menu de contexto no canto superior esquerdo da tela. Eu tentei usar a solução dada a essa outra pergunta sobre como obter posições de tela do DOM para produzir o código abaixo que coloca o menu de contexto mais próximo para o elemento ativo, mas ainda é buggy (às vezes o menu é um pouco fora do elemento):

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);
    
por 24.02.2014 / 20:14
0

Eu não sou especialista, mas você tentou encontrar a configuração em about: config?

se não, então digite a caixa about: config in location e aperte enter e você encontrará muitas configurações lá e me diga se você encontrar alguma configuração lá ou não.

    
por 22.02.2014 / 00:00