Firefox 3.5에서 Firebug 1.4.x 또는 1.5.x를 같이 사용하고 있는 경우 XHR 호출 후, onreadystatechange 이벤트가 발생하지 않는 버그가 있다고 하는군요.
즉, 아래 코드와 같이 처리하는 경우에는 readyState가 1이된 이후에 이벤트가 발생하지 않아 callback 함수가 실행되지 않습니다. 하지만 서버에서 응답이 오지 않는건 아니고 단지 readystatechange 이벤트가 발생하지 않는 것이라는 군요.
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
callback(xhr);
}
};
그런데 항상 발생하는 건 아니고 간헐적으로 발생하고, 응답이 1초 이상 걸리고 시간이 오래 걸릴수록 경우에 발생할 수 있는 가능성이 더 높다고 합니다.
문제는 error가 발생하는 것이 아니기 때문에, try..catch로도 처리할 수 없고 어떤 조건을 지정해 처리할 수도 없다고 합니다.
Firefox 3.0 + Firebug 1.4.x, Firebug가 설치되지 않은 Fierfox 3.5 에서는 발생하지 않는다고 합니다.
그리고 해당 버그가 발생할 때에는 firebug 콘솔에 다음과 같은 메세지가 출력된다고 합니다.
onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass Error: Permission denied for to create wrapper for object of class UnnamedClass
[xpconnect wrapped nsIDOMEventListener]
이곳에 가시면 버그를 재현해 볼수 있는데요, 몇번 실행해 보니 아래와 같은 에러가 출력됩니다.
일반 사용자들의 경우에는 firebug를 거의 사용하지 않을것 같긴한데, 문제는 실제 개발자가 테스트 할때일 것 같군요.
해결방법은 FF 3.5일 경우에는 W3C의 progress event 값을 사용해 처리할 수 있습니다.
xhr.onload = xhr.onerror = xhr.onabort = function(){
callback(xhr);
};
+ 참고 link : http://www.nczonline.net/blog/2009/07/09/firefox-35...
즉, 아래 코드와 같이 처리하는 경우에는 readyState가 1이된 이후에 이벤트가 발생하지 않아 callback 함수가 실행되지 않습니다. 하지만 서버에서 응답이 오지 않는건 아니고 단지 readystatechange 이벤트가 발생하지 않는 것이라는 군요.
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
callback(xhr);
}
};
그런데 항상 발생하는 건 아니고 간헐적으로 발생하고, 응답이 1초 이상 걸리고 시간이 오래 걸릴수록 경우에 발생할 수 있는 가능성이 더 높다고 합니다.
문제는 error가 발생하는 것이 아니기 때문에, try..catch로도 처리할 수 없고 어떤 조건을 지정해 처리할 수도 없다고 합니다.
Firefox 3.0 + Firebug 1.4.x, Firebug가 설치되지 않은 Fierfox 3.5 에서는 발생하지 않는다고 합니다.
그리고 해당 버그가 발생할 때에는 firebug 콘솔에 다음과 같은 메세지가 출력된다고 합니다.
onreadystatechange FAILS Error: Permission denied for to create wrapper for object of class UnnamedClass Error: Permission denied for to create wrapper for object of class UnnamedClass
[xpconnect wrapped nsIDOMEventListener]
이곳에 가시면 버그를 재현해 볼수 있는데요, 몇번 실행해 보니 아래와 같은 에러가 출력됩니다.

해결방법은 FF 3.5일 경우에는 W3C의 progress event 값을 사용해 처리할 수 있습니다.
xhr.onload = xhr.onerror = xhr.onabort = function(){
callback(xhr);
};
+ 참고 link : http://www.nczonline.net/blog/2009/07/09/firefox-35...




덧글