Как избежать ContextMenu после долгого нажатия мыши в Firefox OS Simulator

Я установил чат-приложение в Firefox OS Simulator.

Это приложение добавляет contextmenu слушатели событий, в которых это позволяет мне удалять отдельные сообщения.

Однако этот прослушиватель событий не позволяет мне выбирать текст в сообщениях.

Мне все равно, как эта проблема решается в сенсорных устройствах. Так как я использую ПК, я могу отправить contextmenu слушатель событий, нажав правой кнопкой мыши.

Поэтому, когда я держу левую кнопку мыши, я хочу получить красный от этого contextmenu событие, но все же сможет выбрать текст.

2 ответа

Решение

Это поведение не является ошибкой, оно предназначено как функция:

Имитация сенсорных событий на рабочем столе

Если вы все еще хотите отключить его, выполните следующие действия:

  1. Откройте папку профиля Firefox:
    1. Идти к about:support
    2. Найдите раздел "Основы применения"
    3. Найдите запись "Папка профиля" в таблице.
    4. Нажмите кнопку "Показать папку"
  2. Перейти к extensions вложенная
  3. Найдите папку вашего симулятора, например fxos_2_2_simulator@mozilla.org
  4. Идти к b2g/modules/devtools подпапок
  5. Открой touch-events.js файл с соответствующим текстовым редактором
  6. Найти sendContextMenu функция:

    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. Прокомментируйте эту строку, чтобы избежать отправки события:

    // target.dispatchEvent(evt);
    
  8. Перезапустите симулятор

Обратите внимание, что важно только предотвратить отправку события, а не не вызывать sendContextMenu, В противном случае, клик не будет отменен (this.cancelClick = true), поэтому выбор текста не будет работать должным образом.

Это решение для каждого приложения:

  1. Найдите путь к приложению. Это будет что-то вроде

    [Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
    
  2. Сделайте резервную копию и распакуйте его

  3. Найдите файл JS, который добавляет contextmenu слушатель событий.

    Возможно, это будет что-то вроде

    someThing.addEventListener('contextmenu', function handler(event) {
      // ...
    });
    
  4. Отфильтруйте левую кнопку мыши:

    someThing.addEventListener('contextmenu', function handler(event) {
      if(evt.button === 0) return;
      // ...
    });
    
  5. Убедитесь, что симулятор закрыт

  6. Вставьте измененный файл в нужное место application.zip,
Другие вопросы по тегам