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

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

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

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

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

2 ответа2

0

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

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

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

  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), поэтому выделение текста не будет работать должным образом.

0

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

  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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .