Cómo evitar ContextMenu después de una pulsación prolongada del mouse en Firefox OS Simulator

Cómo evitar ContextMenu después de una pulsación prolongada del mouse en Firefox OS Simulator

Instalé una aplicación de chat en Firefox OS Simulator.

Esa aplicación agrega contextmenudetectores 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 contextmenudetector 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 contextmenuevento aparezca en rojo, pero aún poder seleccionar texto.

Respuesta1

Esta es una solución por aplicación:

  1. Encuentra la ruta a la aplicación. será algo así como

    [Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
    
  2. Copia de seguridad y extráigalo

  3. Busque el archivo JS que agrega el contextmenudetector de eventos.

    Probablemente será algo así como

    someThing.addEventListener('contextmenu', function handler(event) {
      // ...
    });
    
  4. Filtrar el botón izquierdo del mouse:

    someThing.addEventListener('contextmenu', function handler(event) {
      if(evt.button === 0) return;
      // ...
    });
    
  5. Asegúrate de que el simulador esté cerrado.

  6. 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:

  1. Abra la carpeta de perfil de Firefox:
    1. Ir aabout:support
    2. Busque la sección "Conceptos básicos de la aplicación"
    3. Busque la entrada "Carpeta de perfil" en la tabla
    4. Haga clic en el botón "Mostrar carpeta"
  2. Ir a la extensionssubcarpeta
  3. Busque la carpeta de su simulador, por ejemplo[email protected]
  4. Ir b2g/modules/devtoolsa subcarpetas
  5. Abra el touch-events.jsarchivo con un editor de texto adecuado.
  6. Encuentra la sendContextMenufunció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;
    },
    
  7. Comenta esta línea para evitar enviar el evento:

    // target.dispatchEvent(evt);
    
  8. 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.

información relacionada