브라우저 또는 AIR의 모듈 식 Flex 애플리케이션에서 Cmd-C (또는 Ctrl-C) 키보드 이벤트 캡처

StackOverflow https://stackoverflow.com/questions/31849

  •  09-06-2019
  •  | 
  •  

문제

브라우저에서 Flex 애플리케이션을 실행하거나 AIR 앱으로 실행할 때 일반적으로 복사에 사용되는 키보드 이벤트를 캡처 할 수없는 것 같습니다. 아마도 브라우저 나 OS가 먼저 가로 채기 때문일 것입니다.

이벤트를 허용하도록 브라우저 또는 OS에 지시하는 방법이 있습니까?

예를 들어 AdvancedDataGrid에서 keyUp 이벤트를 handleCaseListKeyUp (event)로 설정하여 다음 함수를 호출합니다. 라코 디스

실행할 때 Command 키 (KeyboardEvent.ctrlKey로 표시됨)를 눌러도 "C"키를 놓을 수 없습니다. 다음과 같은 추적 결과를 얻습니다. 라코 디스

보시다시피 내가 캡처 할 수있는 유일한 이벤트는 command 키를 놓는 것입니다. command 키를 누른 상태에서 "C"키를 놓으면 전송조차되지 않습니다.

표준 복사 및 붙여 넣기 키보드 처리를 성공적으로 구현 한 사람이 있습니까?

코드 예제에 표시된대로 "C"키만 사용하거나 복사 버튼을 사용할 수 있도록해야합니까?

아니면 더 높은 수준에서 리스너를 수동으로 생성하고 이벤트를 모듈 식 애플리케이션의 내장으로 전달해야합니까?

도움이 되었습니까?

해결책

무대에서 key up 이벤트를 듣는 테스트를했는데 (Mac에서) control-c, control-v 등은 잘 캡처 할 수 있지만 명령 ( 키)과 관련된 것은 무엇이든 캡처 할 수 있음을 확인했습니다.명령 키를 놓을 때까지 캡처되지 않았고 ctrlKey는 거짓 (문서에 Mac의 명령 키에 대해 ctrlKey가 참이어야한다고 문서에 나와 있음)이었고 charCode는 0이었습니다. 간단히 말해서 쓸모가 없었습니다.

다른 팁

제가 깨달은 또 다른 놀랍도록 성가신 점은 ctrl-c가 event.ctrlKey && event.keyCode = Keyboard.C (또는 ... event.charCode == 67)로 캡처 될 수 없다는 것입니다. 대신 charCode 또는 keyCode를 테스트해야합니다.ctrl-c는 ASCII 테이블의 3이기 때문에 charCode에 대해서는 일리가 있지만, 입력 된 문자가 아니라 키보드의 키를 나타내는 3에는 이치에 맞지 않습니다.다른 모든 키 콤보에도 동일하게 적용됩니다 (모든 ctrl 콤보는 ASCII에 상응하는 값을 갖기 때문입니다).

수정 Flex 버그 시스템에서 이에 대한 버그 발견 : https://bugs.adobe.com/jira/browse/FP-375

캡처 순서를 기반으로 한 해결 방법을 찾았습니다.예를 들어 Cmd + A를 누르면 순서는 다음과 같습니다.

  • 유형 : KEY_DOWN, keyCode 15
  • 유형 : KEY_UP, keyCode 15
  • 유형 : KEY_DOWN, keyCode 65

    따라서 keyCode 15가 내려 갔다가 올라가고 다음 캡처가 내려갈 때마다 사용자가 키 조합을 눌렀다 고 가정 할 수 있습니다.내 구현은 다음과 같이 끝납니다. 라코 디스

저에게는 다음과 같은 작품이 있습니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top