![Cómo evitar ContextMenu después de una pulsación prolongada del mouse en Firefox OS Simulator](https://rvso.com/image/1465813/C%C3%B3mo%20evitar%20ContextMenu%20despu%C3%A9s%20de%20una%20pulsaci%C3%B3n%20prolongada%20del%20mouse%20en%20Firefox%20OS%20Simulator.png)
Instalé una aplicación de chat en Firefox OS Simulator.
Esa aplicación agrega contextmenu
detectores de eventos, en los que me permite eliminar mensajes individuales.
Sin embargo, ese detector de eventos me impide seleccionar texto en los mensajes.
No me importa cómo se resuelve este problema en los dispositivos táctiles. Como estoy usando una PC, puedo enviar un contextmenu
detector de eventos haciendo clic con el botón derecho del mouse.
Por lo tanto, cuando mantengo presionado el botón izquierdo del mouse, quiero que ese contextmenu
evento aparezca en rojo, pero aún poder seleccionar texto.
Respuesta1
Esta es una solución por aplicación:
Encuentra la ruta a la aplicación. será algo así como
[Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
Copia de seguridad y extráigalo
Busque el archivo JS que agrega el
contextmenu
detector de eventos.Probablemente será algo así como
someThing.addEventListener('contextmenu', function handler(event) { // ... });
Filtrar el botón izquierdo del mouse:
someThing.addEventListener('contextmenu', function handler(event) { if(evt.button === 0) return; // ... });
Asegúrate de que el simulador esté cerrado.
- Inserte el archivo modificado en el lugar correcto de
application.zip
.
Respuesta2
Este comportamiento no es un error, sino una característica:
Simule eventos táctiles en el escritorio
Si aún desea desactivarlo, siga estos pasos:
- Abra la carpeta de perfil de Firefox:
- Ir a
about:support
- Busque la sección "Conceptos básicos de la aplicación"
- Busque la entrada "Carpeta de perfil" en la tabla
- Haga clic en el botón "Mostrar carpeta"
- Ir a
- Ir a la
extensions
subcarpeta - Busque la carpeta de su simulador, por ejemplo
[email protected]
- Ir
b2g/modules/devtools
a subcarpetas - Abra el
touch-events.js
archivo con un editor de texto adecuado. Encuentra la
sendContextMenu
función: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; },
Comenta esta línea para evitar enviar el evento:
// target.dispatchEvent(evt);
Reiniciar el simulador
Tenga en cuenta que es importante evitar únicamente el envío del evento en lugar de no llamar sendContextMenu
. De lo contrario, el clic no se cancelaría ( this.cancelClick = true
), por lo que la selección de texto no funcionaría correctamente.