최근 javascript코딩을 하다보면, hash처리가 상당히 유용하게 사용됩니다.

javascript로 그린 게시판을 예로 들면, 페이지 번호로 url을 찾기가 어렵다거나 하는 문제가 생기죠.

그래서 hash를 많이 사용하고,

hashchange 이벤트도 유용하게 사용됩니다.

하지만 문제는 any브라우징입니다.

MS에서 친히 만드신 IE7 이하 버전에서는  hashchange 이벤트가 잡히지 않기 때문입니다.
(혹시 제가 잘못 알고 있다면, 댓글로 알려주시면 감사..^^;;)

그리하여, setInterval 을 사용하여, 주기적으로 hash값을 체크하는 방법으로 처리해 버렸습니다.

무한루프 같은 느낌이어서, 좀 마음에 걸리기는 하지만, (0.5초 간격으로 체크시에) 실제로 사용하는 cpu사용량에는 별 문제가 없기에 다음과 같이 처리 했습니다.

더 좋은 방법이 있으신 분은 트랙백으로 공유 부탁드리겠습니다.


 코드는 아래와 같습니다.

if (window.addEventListener ) {

window.addEventListener('hashchange', function() {

해쉬 이벤트 발생시 처리할 함수();

},false);

} else if (window.attachEvent) {

this.beforeHash = location.hash;

// 0.5초 간격으로 hash값 체크

setInterval(function() {

if (beforeHash==location.hash) return;

해쉬이벤트시 처리할 함수();

beforeHash = location.hash;   // beforeHash는 전역변수..

},500);

}

 
타팀에서 daum에디터를 사용하려는데 JSON.stringify(json) 사용시

array에 대해서 2중 String변환이 일어나 문제가 발생 한다고 기술지원 요청이 왔습니다.

일단 디버깅을 해보니, daum에디터에서 array에 대해서 toJSON을 구현해 두었더군요;;

toJSON은 array를 String으로 변환해줍니다.



문제는 json2.js 239라인 에 아래와 같은 구현이 있다는 것입니다.

        // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         if (typeof value.toJSON(key) !== 'string') value = value.toJSON(key);
        }


네!! toJSON()이 구현되어 있는 경우에 대해서는, toJSON(key)을 실행하도록 해주네요;

그러면서 배열에 대해서 toJSON이 실행되고, 값은 String으로 변환된 상태에서 json2.js는 또한번 String으로 변환하는 문제가 발생합니다;



그래서 위 코드를 아래와 같이 변환하여 주었습니다.

       // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         var v2=value.toJSON(key);
         if (typeof value.toJSON(v2) === 'string') return v2;
         else          value = v2;
        }



toJSON()함수가 있을때 실행해봐서; string이 나오면, 그 string을 return하게 합니다;

테스트해보니; 일단은 잘 돌아갑니다.




아래와 같은 방법도 있습니다.

위보다 성능은 더 떨어질듯 하지만 코드는 아래가 더 이뻐보이네요.ㅎㅎ

 

        // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         if (typeof value.toJSON(value.toJSON(key)) !== 'string') value = value.toJSON(key)
        }

방법은 toJSON을 실행해봐서 결과가  "string"으로 나오면; 무시하고 아닌경우에만

value = value.toJSON(key) 로직을 실행하는 것입니다.


처는 먼저 방식으로 처리 했고; 해당 파일은 첨부하겠습니다.^^;

저처럼 삽질하는 사람이 줄기를 바라는 마음에..^_^.ㅋㅋㅋ


사파리 브라우저로 AJAX를 사용시 커다란 문제가 발생하였습니다.

보통은 10초 이상의 AJAX거래가 잘 없기 때문에 지금까지 잘 발견되지는 않은듯 하지만.

10초 이상의 AJAX 거래시 (sync)로 쏘면 90%의 확률로 async로 쏘면 20%의 확율로 오작동합니다.

여기서 오작동이라함은.

응답코드 : 정상, 상태코드: 정상

의 형태로 응답이 오는데. 실제 응답 데이터는 비어 있는 상태입니다.

그리고 서버에서는 아직 응답을 주지 않은 상태입니다.


원하신다면 제가 재현을 해드릴수도 있습니다.^^;



그래서 결국 safari의 경우에만 form-submit방식을 활용해서 AJAX를 재구현 했습니다.

물론 버그투성이이긴 하지만.. 일단 사용가능 하게 하고 차후에 업데이트(FIX) 할 생각입니다.^^; 


처리한 코드를 원하신다면....간단히 정리하여 올릴 의향이 있습니다만..

요즘 통 블로그를 찾는 분이 없으셔서..ㅋㅋ

 원하는 분이 있지 않을것 같네요.ㅎㅎ


=================================================================================

혹시 정상 적인 AJAX 방법으로 해결하신분 있으시다면...트랙백 좀 부탁드리겠습니다...굽신굽신. 
요즘은 회사에서 일하고 있습니다.

아침에 일어나서 눈을 뜨면 회사로 가야 하구요.

인터넷 서핑좀 하다가...머좀 하다가....하면..

점심시간이네요..

점심을 먹고...다시 자리에 앉아서..


무언가 주접거리고 떠들고 놀고..

그리고 퇴근합니다.

한참 일 잘될때 만큼 효율은 아니지만 어느정도..

산출물은 나오구요..



그리고 매월 23일을 기다립니다.

네..그날은 월급날입니다.

은행에서는 통장에 월급이 들어왔다고 한줄의 로그를 찍어줍니다.

그리곤...카드값이라며...보험료라며...청약이라며..월세라며...공과금이라며...

 한줄한줄 로그를 남기고는 잔고를 0원으로 만들어 버리네요..



어쩌면 전.."집주인님, 보험회사, 은행, 나랏님, 그리고 세상 많은 부자님"들에게 저의 노동력으로 바꾼 금액을 바치는 형태네요...

후~ ..ㅠㅜ..문득 슬프군요.ㅠ_ㅜ





그래도...누군가는 나를 알아주는 사람도 있고..

내가 있어서 행복해 할 사람도 있기때문에..

저의 오늘은 행복한 날인것 같습니다....^^

'[Season II] 20원짜리 이야기' 카테고리의 다른 글

어떤 이야기 #01.  (2) 2012.03.02
정답찾기...  (0) 2012.02.21
메리 크리스 마스!  (1) 2010.12.24
트위터 시작  (0) 2010.08.06
친구에게..  (5) 2010.05.04
매번 짧게짧게 트위터에 글을 쓰다보니..

블로그에 먼가 쓰려고 하면...2-3줄 쓰고 막히네요..ㅠㅜ

어쨋든!!ㅋ

제가 오늘 쓰고 싶었던 것은!!

멜이 구린마스 !!ㅋㅋ


이제 한해도 다 지나가니...훌훌털어야 겠습니다...(지갑도?)

올해가 아무리 힘들고 괴로웠어도...내년은 좀 나아지겠지요...

존경하는 대통령님의 임기도 (2013년 2월) 점점 가까워 지구요..ㅎㅎ 아 어서 그날이 와야 하는데 말이죠.ㅠㅜ




음..이제 한해도 얼마 안남았으니...한살 더 늙어버린 길이가 되어야 겠습니다..

그만큼 머리도 커지구요..ㅠ_ㅜ (흐규흐규)



===================================================================

그래도 크리스 마스니까요...^^ 모두 즐거운 일만 있길바랄께요

크리스마스만 말고...내년도 그 후년도..항상 말이죠.^^

'[Season II] 20원짜리 이야기' 카테고리의 다른 글

정답찾기...  (0) 2012.02.21
길이의 최근 근황입니다.  (0) 2011.04.01
트위터 시작  (0) 2010.08.06
친구에게..  (5) 2010.05.04
결혼하기위해서는...  (12) 2010.04.24

+ Recent posts