에어 앱의 OS X 키 바인딩
-
03-07-2019 - |
문제
에어 앱에서 사용될 때 OS X의 일부 표준 키 스트로크는 무시되거나 예상대로 작동하지 않고 "미스터리"문자를 생성합니다. 예 :
- 옵션 + 왼쪽 화살표 캐럿을 한 단어를 뒤로 움직여야하며 미스터리 캐릭터를 인쇄합니다.
- Ctrl 키 + 시간 하나의 문자를 뒤로 삭제해야합니다. h를 인쇄합니다
OS X 기본 키 스트로크를 지원하려면 어떻게합니까 (여기에 나열 : 여기 : http://www.hcs.harvard.edu/~jrus/site/system%20bindings.html)?
해결책
WebKit 소스에서 지원을 가능하게하는 단서를 찾았습니다. <mx:HTML>
보기, 여기 : http://www.opensource.apple.com/darwinsource/10.5/webcore-5523.10.3/editing/editor.cpp
WebKit의 예상 구문과 관련하여 여기를 여기에 포함시킵니다. http://lists.macosforge.org/pipermail/webkit-unassigned/2007-may/038737.html
참고이 솔루션은 불완전하고 Flex/Flash 구성 요소에서 작동하지 않으며 프로토 타입에 따라 다릅니다.
$(document).observe('dom:loaded', function() {
// Defined in AIR as !!NativeApplication.supportsDockIcon
if(window.Air.OperatingSystem == 'mac') {
var keyBindings = {
altKey: {
// Up (should be 38)
14: {
dir: -1,
gran: 'paragraph'
},
// Down (should be 40)
15: {
dir: 1,
gran: 'paragraph'
},
// Left (should be 37)
1: {
dir: -1,
gran: 'word'
},
// Right (should be 39)
2: {
dir: 1,
gran: 'word'
},
// Backspace
8: {
dir: -1,
gran: 'word',
del: true
},
// Delete
46: {
dir: 1,
gran: 'word',
del: true
}
},
ctrlKey: {
// Left
37: {
dir: -1,
gran: 'lineBoundary'
},
// Right
39: {
dir: 1,
gran: 'lineBoundary'
},
// a
65: {
dir: -1,
gran: 'paragraphBoundary'
},
// b
66: {
dir: -1,
gran: 'character'
},
// d
68: {
dir: 1,
gran: 'character',
del: true
},
// e
69: {
dir: 1,
gran: 'paragraphBoundary'
},
// f
70: {
dir: 1,
gran: 'character'
},
// h
72: {
dir: -1,
gran: 'character',
del: true
},
// k
75: {
dir: 1,
gran: 'paragraphBoundary',
del: true
},
// n
78: {
dir: 1,
gran: 'line'
},
// p
80: {
dir: -1,
gran: 'line'
}
}
};
$(document).observe('keydown', function(e) {
var target = e.element();
if(
target.match('input') ||
target.match('textarea') ||
target.readAttribute('contenteditable') == 'true'
) {
if(
(e.keyCode in keyBindings.altKey && e.altKey) ||
(e.keyCode in keyBindings.ctrlKey && e.ctrlKey)
) {
e.stop();
var selection = window.getSelection();
var keystroke = keyBindings[(e.altKey ? 'altKey' : 'ctrlKey')][e.keyCode];
if(
(e.keyCode != 8 && e.keyCode != 46) ||
selection.isCollapsed
) {
selection.modify(
keystroke.del || e.shiftKey ?
'extend' :
'move',
keystroke.dir == -1 ? 'backward' : keystroke.dir == 1 ? 'forward' : null,
keystroke.gran
);
}
if(keystroke.del && !selection.isCollapsed) {
document.execCommand('delete', false, null);
}
}
}
});
}
});
제휴하지 않습니다 StackOverflow