Instalei um aplicativo de bate-papo no Firefox OS Simulator.
Esse aplicativo adiciona contextmenu
ouvintes 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 contextmenu
ouvinte de eventos clicando com o botão direito do mouse.
Portanto, quando mantenho o botão esquerdo do mouse, quero ficar vermelho desse contextmenu
evento, mas ainda poder selecionar o texto.
Responder1
Esta é uma solução por aplicativo:
Encontre o caminho para o aplicativo. Será algo como
[Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
Faça backup e extraia-o
Encontre o arquivo JS que adiciona o
contextmenu
ouvinte de evento.Provavelmente será algo como
someThing.addEventListener('contextmenu', function handler(event) { // ... });
Filtre o botão esquerdo do mouse:
someThing.addEventListener('contextmenu', function handler(event) { if(evt.button === 0) return; // ... });
Certifique-se de que o Simulador esteja fechado
- 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:
- Abra a pasta de perfil do Firefox:
- Vá para
about:support
- Encontre a seção "Noções básicas do aplicativo"
- Encontre a entrada "Pasta de perfil" na tabela
- Clique no botão "Mostrar pasta"
- Vá para
- Vá para a
extensions
subpasta - Encontre a pasta do seu simulador, por exemplo
[email protected]
- Vá para
b2g/modules/devtools
subpastas - Abra o
touch-events.js
arquivo com um editor de texto adequado Encontre a
sendContextMenu
funçã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; },
Comente esta linha para evitar o envio do evento:
// target.dispatchEvent(evt);
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.