모든 이벤트에서 인기있는 브라우저에서 작동하는 코드를 작성해야합니다. 검색을 한 후에 나는 다음과 같은 함수를 가지고 나왔다.모든 주요 웹 브라우저에서 지원하는 이벤트 수신기를 연결하는 방법
function addListener(event, thefunction)
{
if(window.addEventListener)
{
//All browsers, except IE before version 9.
window.addEventListener(event, thefunction, false);
}
else if(window.attachEvent)
{
//IE before version 9.
window.attachEvent(event, thefunction);
}
}
아주 간단하고 자명하다.
DOMContentLoaded
이벤트에 문제가있을 수 있습니다. IE (AFAIK)의 버전이 인식하지 못하므로 개발자는 onreadystatechange
을 사용해야합니다.
event = (event == 'DOMContentLoaded') ? 'onreadystatechange' : "on" + event;
이 부분은 항상 인터넷 익스플로러의 모든 버전에서 해고되었고,이 라인은 간단한 제공 : 인터넷 익스플로러 9. 당신은 else if(window.attachEvent)
만 추가 라인을 작성했다 때까지이 문제를 해결하는 것은, 아주 간단한 것 같다 이벤트 이름의 번역. 올바른 이름이 항상 사용되었습니다.
하지만 Internet Explorer 9 (이상)은 어떻게됩니까? 마이크로 소프트는 attachEvent
을 addEventListener
에 찬성한다고 결정했다. 그러나 onreadystatechange
을 DOMContentLoaded
으로 변경하지 않았습니다. 이 다른 브라우저에 대해서도 onreadystatechange
이벤트에 DOMContentLoaded
를 다시 그들이 DOMContentLoaded
를 사용할 때,이 실패 때문에
나는 window.addEventListener
부분에 선을 초과하여 사용할 수 없습니다.
이 문제를 해결하는 유일한 방법은 브라우저 검색 (유형 및 버전)을 window.addEventListener
부분에 추가하는 것이며 스크립트가 IE 9 이상을 처리하고 있음을 감지하면 DOMContentLoaded
에서 다음으로 이벤트 이름을 다시 작성합니다. onreadystatechange
(IE에 필요한 다른 이벤트 이름을 on
으로 보완), 다른 브라우저의 경우 이벤트 이름은 변경되지 않습니다.
방금 테스트 한 결과 DOMContentLoaded
도 아니고 onreadystatechange
도 내 IE 8 (첫 번째 오류는 FF/Chrome에서 올바르게 발생 함)에서 발생했기 때문에 잘못된 것 같습니다.
jQuery의 .on()
기능 (또는 이와 유사한 기능)은 어떻게됩니까? 누구든지, 교차 브라우저를 지원하는 경우 DOMContentLoaded
첨부, 그래서이 특정 종류의 이벤트가 내 스크립트, 상관없이 어떤 브라우저 또는 버전을 사용하고 있는지 확인할 수 있습니다 알고 있습니까?
자세한 답변 해 주셔서 감사합니다. 필자가 궁금해했던 점은 왜 IE 8에서'onreadystatechange '가 제대로 작동하지 않는지 궁금합니다.하지만 jQuery를 사용하여이 문제를 해결하고 테스트를 마친 모든 브라우저에서 정상적으로 작동하므로이 방법을 선택했습니다. 궁금해하는 것을 멈췄다! :] – trejder
IE <9는 호환성 문제가 많습니다. IE8에서 확인하겠습니다. IE8에서 [이 답변] (http://stackoverflow.com/a/5959237/1331430)의 코드가 작동하지 않는다는 것을 의미합니까? –
IE8에서'onreadystatechange'를'attachEvent'로 테스트 한 결과, 적어도 [fiddle] (http://jsfiddle.net/SnSXM/)에서 실행되는 것으로 보이지만, 페이지가 처음로드 될 때 두 번 실행됩니다 나는 그것을 로컬에서 테스트 할 것이다). 다행스럽게도 jQuery는 IE 버그가 매우 쉽다는 것을 이해하려고 노력하고 있습니다. ':)' –