
Firefox OS Simulator에 채팅 앱을 설치했습니다.
해당 앱은 contextmenu
개별 메시지를 제거할 수 있는 이벤트 리스너를 추가합니다.
그러나 해당 이벤트 리스너로 인해 메시지에서 텍스트를 선택할 수 없습니다.
터치 장치에서 이 문제가 어떻게 해결되는지는 관심이 없습니다. 저는 PC를 사용하고 있기 때문에 contextmenu
마우스 오른쪽 버튼을 클릭하여 이벤트 리스너를 전달할 수 있습니다.
따라서 왼쪽 마우스 버튼을 누르고 있으면 해당 contextmenu
이벤트가 빨간색으로 표시되지만 여전히 텍스트를 선택할 수 있기를 원합니다.
답변1
이는 앱별 솔루션입니다.
앱의 경로를 찾으세요. 그것은 다음과 같을 것입니다
[Firefox profile]\extensions\[Firefox OS Simulator]\profile\webapps\[ID]\application.zip
백업하고 추출하세요
이벤트 리스너 를 추가하는 JS 파일을 찾으세요
contextmenu
.아마도 다음과 같을 것이다.
someThing.addEventListener('contextmenu', function handler(event) { // ... });
마우스 왼쪽 버튼을 필터링합니다.
someThing.addEventListener('contextmenu', function handler(event) { if(evt.button === 0) return; // ... });
시뮬레이터가 닫혀 있는지 확인하세요
- 수정된 파일을 의 올바른 위치에 삽입합니다
application.zip
.
답변2
이 동작은 버그가 아니며 기능으로 의도된 것입니다.
데스크탑에서 터치 이벤트 시뮬레이션
그래도 비활성화하려면 다음 단계를 따르십시오.
- Firefox의 프로필 폴더를 엽니다:
- 이동
about:support
- "애플리케이션 기본사항" 섹션을 찾으세요.
- 표에서 "프로필 폴더" 항목을 찾습니다.
- "폴더 표시" 버튼을 클릭하세요
- 이동
extensions
하위 폴더 로 이동- 시뮬레이터의 폴더를 찾으세요. 예:
[email protected]
b2g/modules/devtools
하위 폴더 로 이동touch-events.js
적절한 텍스트 편집기로 파일을 엽니다.기능 을 찾으세요
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; },
이벤트 전달을 방지하려면 다음 줄을 주석 처리합니다.
// target.dispatchEvent(evt);
시뮬레이터 다시 시작
를 호출하지 않는 대신 이벤트 전달만 방지하는 것이 중요합니다 sendContextMenu
. 그렇지 않으면 클릭이 취소되지 않아( this.cancelClick = true
) 텍스트 선택이 제대로 작동하지 않습니다.