私は比較的大きなECMAScriptコードベース(> 60,000 LOC)で作業します。恐ろしい友人のInternet Explorer(特に6と7)のエラーを検出するのに少し苦労する傾向があります。IE-breaking ECMAScript/JavaScriptエラーを見つけよう
現時点では、Google RIAがGoogle Chrome、Firefox 3.6、Opera、Internet Explorer 8でうまくレンダリングされていて、Internet Explorer 8をIE7モードで実行しているときに3日間問題が発生しました(または実際のIE-7を使用して)。
私の質問は本当ですか:IE7でエラーが発生するコードを特定するにはどうすればよいですか?
通常、私はJSLintに頼っていますが、通常の容疑者(後ろのカンマ、私は嫌です)を捕まえる傾向がありますが、この特定のケースでは、ソースコードと最小化コードの両方にリンターを再実行しました。私の通常の容疑者は出てこない。だから私は間違ってIEが好きではないものを導入したと思います(私はどこかでdojo.mapの代わりにArray.mapを使用していたかもしれません)、それは私の顔に爆発し、私はすべて助けてください( "オブジェクトオブジェクト"と "ヌル"であるべきではありませんので、静かに失敗し、このオブジェクトが作成されるのを防ぐエラーアップストリームがあると仮定します)。
私はGoogle Closure Linterを見てみましたが、特別なことはありません.Google Closure Compilerが私の救世主になるとは思いません。あたかもIEをエミュレートしているかのようにコードを解析/実行できるツール(コマンドライン、Webサービス、その他)がありますので、適切なエラーを得ることができますか?
ご了承ください。
編集:これまでのところ私の問題を解決しようとしてくれてありがとう、私が本当に頼んでいるのは、この種のチェックを行うツールがあるかどうかです。つまり、特定のブラウザ。これは私の意見でJSの世界では欠けているものです(FFやChromeではあまり意味がありませんが、明らかにデバッガはもう少し役に立ちます)。
EDIT2:私は最終的に2つのブランチ間でコードの変更をすべて行い、問題は実際には既に存在していたが、以前は検出されずに以前の変更混乱の範囲を狭め、最終的にはすべてのコンソールログを追加することになりました。(重大ではあるものの、動作する...すべての行にログを追加する正規表現のサポートでemacsに感謝しています)。面白い事実:IEは、もともとソースの問題をキャッチし、それを再スローするtry catchブロックに表示されるはずのエラーメッセージを飲み込んだ。それでもそれができないのであれば、それが壊れた場合にその目的のために意図されていたように、それを見つけるのがずっと簡単だったでしょう。奇妙な。深いレベルの再投げが気に入らないかもしれない。
私は質問を開いたままにしておきますが、今のところ実際の質問に対する回答はありません。
IE8の古いIE7モードで実行しているときにデバッグコンソールを開くと、エラーが発生している場所を指すようにエラーチェックボタンがオンになっていますか? – epascarello
JSLintとClosureのコンパイラは、ブラウザのXがYメソッドをサポートしていないよりも、構文上の問題があります。 – epascarello
@epascarello:はい、スローステートメントの1つを指していますが、stacktraceを通過してスローしたものが何かを突き止めていないことを示しています。さらに、このファイルに固有のようではありません。ブートストラップで起動されるファイルの順序を変更すると、最初のどちらかでどこかで失敗します。私はJSLintとClosureがこれをやっていないことを知っていますが、主にブラウザーに依存する主な問題はIE7の末尾のカンマです。許されている他の何もかもを助けません。 – haylem