Page 1 of 1
자바스크립트 초난감 ㅡㅡ;
Posted: 2005 01 05 21:22 14
by 박민권
자바스크립트로 이벤트의 keyCode 값을 이용한 인터페이스를 만드는데
불여우에서는 xhtml dtd선언시 한글상태에서는 특수키를 제외한 keyCode 값이
전부 229로 되어버립니다. ㅡㅡ;
혹시 이거 버그가 아닐까요?
해결방안을 못찾겠습니다.
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title></title>
<script type="text/javascript">
document.onkeydown = function(e){
alert(e.keyCode);
}
</script>
</head>
<body>
</body>
</html>
Posted: 2005 01 05 22:05 48
by 빛알갱이
윈도우즈용 파이어폭스와 모질라 스위트에서 공히 두벌식에서 한글 자모에 해당하는 키를 누르면 항상 229가 되네요. 숫자 키는 정상 동작합니다. 리눅스용 모질라 스위트는 좀 다르네요. FAYT(Find As You Type)가 한글 상태에서는 입력을 먼저 가져 갑니다. 흠, 윈도우즈용 모질라 스위트는 왜 이것을 안 가져가지?
그나저나 '229'는 어디서 나왔는지 모르겠네요. 0xE5인데, 한글 음절을 UTF-8로 표현한 경우 첫 바이트도 아니고, 한글 자모를 UTF-8로 표현한 경우의 첫 바이트도 아니고 (UTF-16 표현의 어떤 바이트와도 관련이 없고) ... 아 VMware도 없고..
다시 Windows로 부팅을 해야 하나...
MS IE는 입력 필드가 없을 경우에 IME를 disable 시키는군요. 모질라는 FAYT 기능을 지원해야 하기 때문에 이 경우에도 IME를 disable 시키지 않고요. 그런데, textarea 등에서는 어느 브라우저나 비슷한 문제가 있을 것 같은데요. 어떤가요?
textarea에서 테스트 해봤습니다.
Posted: 2005 01 05 22:32 42
by 박민권
textarea에서 태스트해본 결과
모질라는 여전히 229
IE는 한글입력시 아무런 값이 없음, alert(event.keyCode)를 하더라도
빈 값이기에 alert이 뜨질 않음.
오페라는 모질라와 같음. 단 textarea에 글씨가 입력되지 않음.
alert(event.keyCode) 발생후 키 값 유실 ㅡㅡ;
도대체 229는 무엇일까요? 구글에서 keyCode 229에 대한 내용을 찾아봐도
제대로된 페이지는 한 페이지도 나오질 않더군요.
자바스크립트로 단축키를 이용한 프로그램을 만들려고 했더니만 막혀버렸네요. ㅡㅡ;
OTL 좌절임당 ㅠ_ㅠ
아스키코드표에서 229는 å 네요. ㅡㅡ;
Re: textarea에서 테스트 해봤습니다.
Posted: 2005 01 05 23:53 38
by 빛알갱이
박민권 wrote:textarea에서 태스트해본 결과
모질라는 여전히 229
IE는 한글입력시 아무런 값이 없음, alert(event.keyCode)를 하더라도
빈 값이기에 alert이 뜨질 않음.
시험해 주셔서 감사합니다.
제가 좀 잘못 썼네요. textarea에서는 어느 브라우저든지 alert가 안 뜰 것이라고 쓴다는 것이... 그런데, 윈도우즈용 모질라는 여전히 그런 문제가 있다면, 생각 밖이군요. '229'의 비밀을 푸는 길은 디버그 빌드를 윈도우즈에서 디버거로 추적해 보는 것이 가장 빠른 길인데, 제가 윈도우즈로 부팅을 해야.... 버그질라에 보고하고, 모질라 일본의 이쪽 전문가에게 시험해 보라고 해야겠네요.
textarea 시험 케이스도 만들어 올려 주시겠습니까?
아스키코드표에서 229는 å 네요. ㅡㅡ;
off-topic: US-ASCII는 0x00에서 0x7F까지만 글자가 있습니다. 0xE5는 US-ASCII/ISO 646:IRV에서 정의한 것이 아니고, ISO-8859-1에서 'å'로 정의되어 있고요. 다른 8bit 문자 집합에서는 다른 글자로 대응되어 있습니다. 다만, Unicode/ISO 10646은 첫 256자를 ISO-8859-1과 일치시켰으므로 U+00E5는 'å'입니다.
또, ISO-8859-1이나 이를 확장한 Windows-1252를 'extended ASCII'라고 부르는 경우가 있는데, 이는 잘못된 표현입니다. US-ASCII를 정의한 ANSI에서는 이것을 확장한 적이 없거든요
감사합니다.
Posted: 2005 01 05 23:59 52
by 박민권
신경써 주셔서 감사합니다.
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title></title>
</head>
<body>
<form>
<textarea onkeydown="this.form.txt.value = event.keyCode"></textarea><br />
<input type="text" name="txt" />
</form>
</body>
</html>
Posted: 2005 04 09 15:50 49
by yser
관심 있게 글을 보다가...
구글 저팬을 통해 알아보았습니다.
일단, 구글을 통해 찾아보니 일본 사이트에서 설명하는 글 중, 일본어 자판의 경우 한자 입력중이면 229 가 들어간다고 합니다. 즉 IME 가 주도권을 잡고 있을 때 말이죠. 이것을 보고 착안, 그 키코드 문제는 IME 에 답이 있다 생각하여 windows api 정복 책으로 유명한 김도형님의 사이트에서 검색을 보았습니다.
http://winapi.co.kr/ApiBoard/content.ph ... lqa&pk=770
>미완성 메시지는 WM_USER+229
>완성 메시지는 WM_USER+230
http://winapi.co.kr/ApiBoard/content.ph ... a&pk=40287
즉 이것은 IME 의 동작에 따른 차이라고 봐야 겠군요.
저는 IME 가 아닌 날개셋이라는 세벌식 용 한글 입력기를 쓰고 있습니다만, 마찬가지로 229 가 나옵니다. TSF 모듈이라던지 뭐 더 있던데 자세한 것은 모르겠습니다. 아무래도 윈도 기반의 시스템적 지식이 필요할 듯 합니다.
msdn 에서 찾아봤는데 키워드를 모르겠습니다.
일단 ime 를 잘 아시는 분에게 질문을 해보겠습니다.
가끔 웹 개발 하다보면 기반 기술이나 그런 부분에서 윈도 어플을 알아야하는 경우가 생기더군요.. 이것도 그런 게 아닐지..
음냐...
Posted: 2005 04 11 12:04 09
by 박민권
음... 문자가 완성되지 않았다면 즉 입력중이면 WM_USER+229 이군요.
불여우라도 하드웨어 입력 및 제어는 윈도우를 거쳐야 하는 것인가.
최대한 운영체제 존속적이지 않게 만든것으로 알지만 어쩔수없나 보네요.
IME의 동작차이라고 보았을때 yser님은 날개셋을 통한 입력인데도 229가 나온다니
더 하위적인 문제가 아닌지. 아니면 IME가 229로 나타내는것과는 별개로
우연 혹은 약속으로 불여우도 229로 표현하는 것이 아닐까요?
프로그램의 세계는 너무 깊어 ㅠ_ㅠ
Posted: 2005 04 11 13:20 35
by yser
http://moogi.new21.org/zb41/view.php?id ... asc&no=369
여기서 참고 하세요.
용묵님이 답변 해 주셨네요.
...아무래도 윈도 어플, 웹 플그밍을 다 해본 사람 + DOM Model, JS 아는 사람이 해결책을 알지도 모르겠다는 생각이.. -_-
어찌보면 불가능해 보이기도 합니다.
Posted: 2005 04 11 13:22 28
by yser
p.s
요는, IME 가 메시지를 가로채기 때문입니다.
IME 쓰는 이상 피해갈 수가 없죠. 와하하
ㅎㅎㅎ
Posted: 2005 04 11 14:23 10
by 박민권
yser wrote:p.s
요는, IME 가 메시지를 가로채기 때문입니다.
IME 쓰는 이상 피해갈 수가 없죠. 와하하
가로채였군요.
용묵님 답변대로라면 IME의 app함수를 써야할텐데 js로는 불가능하니 불가능.
컴퓨터는 0,1만 가지고 다 처리하는데 사람의 언어가 문제네요. ㅋㅋ