2010년 3월 23일 화요일

IE Error : KB927917

IE는 다른 브라우저들과는 달리, 자신이 속한 DOM 트리의 부모 엘리먼트를 조작하지 못하게 되어있다. 즉, 다음과 같은 코드는 에러를 만든다.

<div id="something">
  <script type="text/javascript">
    document.getElementById("something").appendChild(anything);
  </script>
</div>
자식엘리먼트에 속한 script블록이 자신의 부모엘리먼트에 대한 조작을 하려하고 있는 상태이다. 이 경우 다른 브라우저에서는 아무런 문제없이 정상작동하지만, IE에서는 KB927917 에러를 발생시킨다. 대표적인 조작 메쏘드는 appendChild, removeChild, innerHTML 등.

이 문제를 해결하기 위해서는 해당 스크립트를 조작대상 엘리먼트(이 경우에는 "something")의 바깥으로 빼면 된다. (애초에 모든 스크립트를 head 섹션안에 두고, body안에는 script 태그를 없애고, onload를 이용해서 Late Binding을 시켜주면 아예 발생하지 않는다만, 이렇게 리팩토링하라고 하면 모두 좌절할 듯. 게다가 텍큐는 내가 안짰다규... T_T)

MSDN을 보면 IE8에서는 이 버그가 해결되었다고 하는데(아주 자랑스럽게, 해결책을 "Upgrade to IE8"이라고 내놓고 있다.), 여전히 발생하는 걸 보면 안고쳐진게 틀림없는 듯.

아무튼 어제 쓴 포스팅에 대한 AS 차원의 글.



댓글 1개:

  1. 음...예전에 innerHTML로 만든 채팅프로그램이 오류났던게 이거군요

    -_-

    답글삭제