Como evitar o ContextMenu após pressionar longamente o mouse no Firefox OS Simulator

Como evitar o ContextMenu após pressionar longamente o mouse no Firefox OS Simulator

Instalei um aplicativo de bate-papo no Firefox OS Simulator.

Esse aplicativo adiciona contextmenuouvintes de eventos, nos quais me permite remover mensagens individuais.

No entanto, esse ouvinte de eventos me impede de selecionar texto nas mensagens.

Não me importa como esse problema é resolvido em dispositivos de toque. Como estou usando um PC, posso despachar um contextmenuouvinte de eventos clicando com o botão direito do mouse.

Portanto, quando mantenho o botão esquerdo do mouse, quero ficar vermelho desse contextmenuevento, mas ainda poder selecionar o texto.

Responder1

Esta é uma solução por aplicativo:

  1. Encontre o caminho para o aplicativo. Será algo como

    [Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
    
  2. Faça backup e extraia-o

  3. Encontre o arquivo JS que adiciona o contextmenuouvinte de evento.

    Provavelmente será algo como

    someThing.addEventListener('contextmenu', function handler(event) {
      // ...
    });
    
  4. Filtre o botão esquerdo do mouse:

    someThing.addEventListener('contextmenu', function handler(event) {
      if(evt.button === 0) return;
      // ...
    });
    
  5. Certifique-se de que o Simulador esteja fechado

  6. Insira o arquivo modificado no lugar certo de application.zip.

Responder2

Este comportamento não é um bug, é um recurso:

Simule eventos de toque no desktop

Se você ainda quiser desativá-lo, siga estas etapas:

  1. Abra a pasta de perfil do Firefox:
    1. Vá paraabout:support
    2. Encontre a seção "Noções básicas do aplicativo"
    3. Encontre a entrada "Pasta de perfil" na tabela
    4. Clique no botão "Mostrar pasta"
  2. Vá para a extensionssubpasta
  3. Encontre a pasta do seu simulador, por exemplo[email protected]
  4. Vá para b2g/modules/devtoolssubpastas
  5. Abra o touch-events.jsarquivo com um editor de texto adequado
  6. Encontre a sendContextMenufunção:

    sendContextMenu: function teh_sendContextMenu(target, x, y, delay) {
      let doc = target.ownerDocument;
      let evt = doc.createEvent('MouseEvent');
      evt.initMouseEvent('contextmenu', true, true, doc.defaultView,
                         0, x, y, x, y, false, false, false, false,
                         0, null);
      let content = this.getContent(target);
      let timeout = content.setTimeout((function contextMenu() {
        target.dispatchEvent(evt);
        this.cancelClick = true;
      }).bind(this), delay);
      return timeout;
    },
    
  7. Comente esta linha para evitar o envio do evento:

    // target.dispatchEvent(evt);
    
  8. Reinicie o Simulador

Observe que é importante impedir apenas o envio do evento em vez de não chamar sendContextMenu. Caso contrário, o clique não seria cancelado ( this.cancelClick = true), portanto a seleção do texto não funcionaria corretamente.

informação relacionada