제목 글자수가 적어서 제목을 제대로 못적었습니다.;;
* 이 문서의 코드는 IE 5.5, IE 6, IE 7 Beta2, FireFox 1.5.0.1, Opera 8.5 에서 테스트 하였습니다.
아래와 같이 버튼 객체를 하나 생성합니다.
var obj = document.createElement('input');
obj.setAttribute('type','button');
그리고 이 버튼을 클릭시 경고창을 띄우도록 아래와 같이 코딩합니다.
obj.setAttribute('onclick','alert(1)');
IE에서는 동작하지 않습니다. IE7 Beta2 에서도 테스트 해봤지만 고쳐지지 않았습니다.
IE에서는 아래와 같이 코딩하여야 동작합니다.
var obj = document.createElement('<input onclick="alert(1)">');
때문에 IE와 기타 브라우저에서의 객체 생성을 다르게 해주어야 합니다.
그렇다고 navigator.userAgent 를 이용하여 브라우저를 구분하는 방식은 좋지 못한 방식입니다.
이 부분에 대한 자료를 찾지 못해서 직접 다양하게 테스트 해보고 가장 괜찮다 싶은 방법을 찾아냈습니다.
아래의 코드는 IE에서만 'tmp'라는 경고창이 뜨며 다른 브라우저에서는 null 값으로 처리됩니다.
obj["onclick"] = 'tmp';
alert(obj.getAttribute('onclick'));
이 특징을 이용하여 아래와 같은 코딩으로 IE와 기타 브라우저의 객체 생성을 방법을 구분할 수 있습니다.
Code: Select all
var obj = document.createElement('input');
obj["onclick"] = 'tmp';
if(obj.getAttribute('onclick')){ //IE전용 객체 새로생성
var obj = document.createElement('<input onclick="alert(1)">');
}
else{ //표준 지키는 멋진 브라우저는 기존 객체에 이벤트만 추가
obj.setAttribute('onclick','alert(1)');
}
//나머지 속성 추가
obj.setAttribute('type','button');
아래와 같은 코드를 생각하시는 분들도 계시리라 생각합니다.
obj["onclick"] = 'alert(1)';
물론 IE에서 obj.getAttribute('onclick')을 통해 속성이 추가됐음을 확인 할 수 있지만 동작은 하지 않습니다. ^^;
언제나 IE는 브라우저들 사이에 왕따인것 같습니다.
코딩할것도 많은데 IE 때문에 이거 해결하느라 시간 다 보냈습니다. ㅠㅠ