비교적 큰 ECMAScript 코드베이스 (> 60,000 LOC)에서 작업하고 우리는 두려운 친구 Internet Explorer (특히 6과 7)의 오류를 감지하는 데 어려움을 겪습니다.IE 깨는 ECMAScript/JavaScript 오류 찾기
현재 Google RIA가 Google 크롬, Firefox 3.6, Opera 및 Internet Explorer 8에서 잘 렌더링되지만 IE7 모드에서 Internet Explorer 8을 실행하면 실패하는 문제가 3 일 동안 지속되었습니다. 실제 IE-7 사용).
제 질문은 실제로 : IE7에서 오류가 발생하는 코드를 식별하는 방법은 무엇입니까?
보통 나는 JSLint에 의존하고 있으며 일반적인 용의자 (후행 쉼표, 나는 혐오 스럽다)를 잡는 경향이 있지만,이 특별한 경우에는 소스 코드와 최소화 코드 모두에서 linter를 다시 실행했습니다. 내 평소 용의자를 양보하지 않습니다. 그래서 나는 실수로 IE가 좋아하지 않는 것을 도입했다고 생각한다. (어쩌면 나는 어쩌면 내가 어리석은 곳에서 dojo.map 대신 Array.map을 사용 했는가?) 그리고 내 얼굴에 불면, 나 도움이되지 않는다면 ("[object object]"와 "null"입니다. 따라서 자동으로 실패한 오류 업 스트림이 있었고이 개체가 생성되지 못했다고 가정합니다).
Google Closure Linter를 살펴 보았지만 특별한 결과가 나타나지 않았습니다. Google Closure Compiler가 내 구원자가 될 것이라고 생각지 않습니다. 우리가 적절한 오류를 얻을 수 있도록 IE를 에뮬레이트하는 것처럼 코드를 구문 분석/실행할 수있는 도구 (명령 줄, 웹 서비스 또는 기타)가 있습니까?
팁을 주시면 감사하겠습니다.
편집 : 지금까지 내 문제를 해결하는 데 도움을 주셔서 감사합니다.하지만 내가 묻는 것은 이러한 종류의 검사를 수행하는 도구가 있는지, 특정 브라우저에 대한 기능 집합 및 구문의 유효성을 검사하는 것입니다. . 이것은 제 생각에 JS- 세계에서별로 부족한 것입니다 (FF 나 Chrome에는 그리 밝지 않습니다. 디버거가 좀 더 도움이 될 것입니다).
EDIT2 : 결국 두 분기 간의 모든 코드 변경을 통해 문제가 실제로 이미 있었지만 이전에는 감지되지 않았고 이전 변경 사항으로 돌아가는 것을 확인하여 결국 오늘 (3 일 후) 내 문제의 근원을 발견했습니다. 혼란을 좁히고 궁극적으로 콘솔 로그를 추가하여 결국 실패 지점에 도달하게 될 것입니다 (하나님은 모든 단일 라인에 로그를 추가하는 정규 표현식 지원에 대해 이맥스에게 감사드립니다 ... 무겁지만 작동합니다 ...). 재미있는 사실 : IE는 원래 소스 문제를 잡아서 다시 던지는 try catch 블록에 표시되어야하는 오류 메시지를 삼켰습니다. 아직도 그 이유는 없지만 그렇게하지 않았다면 발견하기가 훨씬 쉬워 졌을 것입니다. 파산 된 경우 그 목적을위한 것이기 때문입니다. 기묘한. 깊은 수준의 재연을 좋아하지 않을 수도 있습니다.
실제 질문에 대해서는 답변을 드릴 수 없습니다.
이전 IE7 모드에서 IE8로 실행하고 디버깅 콘솔을 열면 오류가 발생하는 위치를 가리킬 수 있도록 오류 체크 버튼이 멋지게 나옵니 까? – epascarello
JSLint와 Closure 컴파일러는 브라우저 X보다 Y 구문을 지원하지 않습니다. – epascarello
@epascarello : 예, throw 문 중 하나를 가리킨 다음 stacktrace를 통해 우리가 던진 것을 보여주기 위해 아무 것도 지적하지 않았습니다. 플러스 그것은이 파일에 특정되지 않는 것 : 내가 부트 스트랩에서 시작된 파일의 순서를 변경하면, 그것은 어느 쪽이든 먼저 실패합니다. 나는 JSLint와 Closure가 이것을하지 않는다는 것을 안다. 그러나 대개 브라우저 의존적 인 이슈는 IE7의 쉼표이다. 부여 된 다른 것에 대해서는별로 도움이되지 않습니다. – haylem