Rev. 2.73

prototypeonieerror.gif

어느 때 부터인지 IE에서 특정한 페이지를 로드하면 원인을 알수 없는 오류가 지속적으로 나타나는 증상을 보여서 디버깅에 들어갔다. Prototype 1.6.0 release candidate로 업데이트한 후 위 화면과 같은 문법오류 메시지가 나타나는 요상한 증상을 서로 다른 프로젝트에서 경험했다. 처음 접했을 때에는 인코딩에서 발생한 문제로 판단하고 별별 삽질을 강행하다가 울며 겨자먹기로 버전다운 할 수 밖에 없었다. 결국에는 수천 라인을 비교추적하는 작업 끝에 버그발생의 원인을 알아내고 말았다. 이 허무맹랑한 현상은 Dean Edwards씨에 의해 새롭게 생겨난 'contentloaded' 이벤트 때문에 발생한다.

prototype.js의 4013라인에 아래와 같은 문장이 있다.

4013      document.write("<script id=__onDOMContentLoaded defer " +
4014            "src='://javascript:void(0)'><\/script>");

위 문장을 다음과 같이 수정하면 오류가 사라진다.

4013      document.write("<script id=__onDOMContentLoaded defer " +
4014           "src='http://javascript:void(0)'><\/script>");

그러나, 오류만 사라지고 'contentloaded' 이벤트가 발동하지는 않았다. 이 이벤트는 DOM의 드로잉이 완료되는 시점에 발동하는 이벤트이다. 모든 컨텐츠의 로딩이 완료되는 시점에 발사되는 onload와는 차별되는 이벤트다. 이와 같은 문제로 골머리를 앓고 있는 개발자가 여럿 있다는 사실을 구글링을 통해 알 수 있었고 아래와 같은 해결방안을 찾을 수 있었다.

4013      document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>"); // fix syntax error

아..... 요 벌거지 때문에 이틀 밤잠을 설레발쳤다.... 이제 자야지...

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar