Firefox OS 시뮬레이터에서 마우스를 길게 누른 후 ContextMenu를 방지하는 방법

Firefox OS 시뮬레이터에서 마우스를 길게 누른 후 ContextMenu를 방지하는 방법

Firefox OS Simulator에 채팅 앱을 설치했습니다.

해당 앱은 contextmenu개별 메시지를 제거할 수 있는 이벤트 리스너를 추가합니다.

그러나 해당 이벤트 리스너로 인해 메시지에서 텍스트를 선택할 수 없습니다.

터치 장치에서 이 문제가 어떻게 해결되는지는 관심이 없습니다. 저는 PC를 사용하고 있기 때문에 contextmenu마우스 오른쪽 버튼을 클릭하여 이벤트 리스너를 전달할 수 있습니다.

따라서 왼쪽 마우스 버튼을 누르고 있으면 해당 contextmenu이벤트가 빨간색으로 표시되지만 여전히 텍스트를 선택할 수 있기를 원합니다.

답변1

이는 앱별 솔루션입니다.

  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.

답변2

이 동작은 버그가 아니며 기능으로 의도된 것입니다.

데스크탑에서 터치 이벤트 시뮬레이션

그래도 비활성화하려면 다음 단계를 따르십시오.

  1. Firefox의 프로필 폴더를 엽니다:
    1. 이동about:support
    2. "애플리케이션 기본사항" 섹션을 찾으세요.
    3. 표에서 "프로필 폴더" 항목을 찾습니다.
    4. "폴더 표시" 버튼을 클릭하세요
  2. extensions하위 폴더 로 이동
  3. 시뮬레이터의 폴더를 찾으세요. 예:[email protected]
  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) 텍스트 선택이 제대로 작동하지 않습니다.

관련 정보