알립니다

마인필드에서 쓸 수 있게 고친 Firebug 1.0

Firebug 1.0 버전이 개발되면서 강력한 기능들이 많이 추가됐지만, 일부 기능은 마인필드에서 제대로 작동하지 않았다. HTML 탭의 내용이 제대로 만들어 지지 않는다던가, 구글 리더와 같은 AJAX 기반 웹서비스가 제대로 작동하지 않았다.

마인필드가 정식 버전이 아니라서 그러려니 하고 쓰려고 해도 기능이 너무 아까워, 하루 날 잡아 코드를 뒤져봤다. 그리고 파이어폭스2와 마인필드의 차이점을 찾아가며 고쳤더니, 제대로 돌아가는 것 같았다. 고친 내용을 패치 파일로 만들어 제작자인 조 휴이트(Joe Hewitt) 씨에게 보냈지만, 지난 수요일 발표된 1.0 정식 버전에는 반영되지 않았다[각주:1].

그래서 마인필드에서 쓸 수 있게 고친 Firebug 1.0을 올려둔다.

마인필드에서 발생하는 주요 오류는 다음과 같다.

  1. __firebugTemp__ is not defined, __scope__ is not defined 오류
  2. NS_ERROR_DOM_WRONG_DOCUMENT_ERR 오류
  3. XMLHttpRequest를 쓸 때 멈추는 현상

첫 번째 오류는 351633번 버그가 체크인되면서 발생한 문제다. Firebug는 XMLHttpRequest 객체를 감시하려고 싸개(__firebug__)를 만드는 데, 보안상 크롬(chrome) 권한을 주지 않으려 javascript: URI로 해결한다. 실행하기 바로 직전에 __firebugTemp__에 코드 내용을 넣어두고 eval() 함수로 처리하고 바로 지워버리는데, 비동기 방식으로 처리하다보니 실행하기 전에 __firebugTemp__가 없어져 생기는 문제다. Components.utils.evalInSandbox로 해결했는데, 보안상 문제가 있을 것 같지도 않고 제대로 돌아간다.

두 번째 오류는 47903번 버그 때문이다. Firebug가 UI를 만드는 데 DOM API를 직접 쓰지 않고, innerHTML을 활용하는데, womb이라는 변수를 하나만 만들어두고 쓰는 바람에 패널이 두 개 이상일 때 문제가 발생했다.

세 번째 오류는 관련 버그는 찾지 못했지만 원인은 다음과 같다. 파이어폭스2까지는 XPCOM 컴포넌트의 메소드를 호출할 때 인자 갯수를 검사하지 않았지만, 이후에는 인자 갯수가 모자르면 예외를 발생하고는 실행을 멈춰버리면서 생긴 문제다. XMLHttpRequest의 onreadystate 메소드의 싸개가 본디 메소드를 호출하면서 인자(event)를 넘겨주지 않아 예외가 발생하는데, 별다른 오류 메시지를 출력하지 않게 해두어 찾기가 꽤나 번거로웠다.

덧. 엄격한 모드(strict mode)에서 경고가 발생하는 것들을 경고가 나오지 않게 고쳤지만, 휴이트 씨는 경고 메시지를 보이지 않게 하는 것 보다는 코드의 가독성이 중요하다고 하면서 오류를 고치는 패치만 받아줬다. 여기 올린 파일은 개인적으로 확인한 경고 메시지는 모두 보이지 않게 해두었다.

  1. 휴이트 씨가 보낸 메일에 의하면 1.01에 반영된다고 한다. [본문으로]
◀ 이전 : [1] : [2] : [3] : [4] : [5] : [6] : [7] : ... [51] : 다음 ▶

달력

«   2008/10   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

최근에 달린 댓글

최근에 받은 트랙백

통계