8

非常に複雑な IE イントラネット アプリケーションをデバッグしようとしています。例外が発生したことを示すカスタム メッセージのアラートが表示されます。メッセージはあまり役に立たないので、この例外に関する詳細を知りたいです。

多くのiFrame(およびそれが違いを生む場合は.htcファイル)を含むマスターページがあるため、 window.alert を乗っ取ってみることはできないと思います。私の最後の手段は、ファイル検索で運試しをすることです。

とにかくIE 8を使用して、このアラートがどこから来ているかを検出できますか? 理想的な解決策は、デバッガー ステートメントを正しいアラート位置に挿入する "breakOnAlert" 関数を作成することです。

明確にするために:マスターページには多くのiframeが含まれており、エラー+アラートはこれらの1つから来ていると思います。各 iframe は aspx ページ (ユーザーからの動的な html/javascript を使用する場合もあります) であり、インラインおよび外部 JavaScript が含まれています。投稿する前に、自分のページ (iframe 内の子ページ) でアラートをオーバーライドしようとしましたが、うまくいきませんでした。各iframeには独自のウィンドウオブジェクトがあるため、機能しないため、それぞれに独自のバージョンのアラートがあると想定しています. これを機能させるには、すべての iframe を見つけてそれぞれをオーバーライドする必要がありますが、これは非常に複雑になると思います。IE 開発者ツールでは、膨大な量のスクリプト ファイル (インラインおよび外部) を確認できるため、そこにあるアラートを手動で探すのは非常に困難です。

4

2 に答える 2

5

すべての iframe でそれを行うのは非常に面倒なので、おそらくFiddleralert(を使用して、プログラムで次のようなものに置き換えます。

(function(n){alert(n);debugger;})(

IE はdebuggerステートメントをサポートする必要があるため、コールスタックが必要です

このページでは、Fiddler でテキスト置換を行う方法について説明します

に追加する Fiddler カスタム ルールの例OnBeforeResponse:

if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html"))
{
    oSession.utilDecodeResponse();
    var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
    oBody = oBody.replace(/alert\(/gi, "(function(n){alert(n);debugger;})(");
    oSession.utilSetResponseBody(oBody);
}
于 2012-04-10T02:30:24.993 に答える
1

アラート機能をオーバーライドし、内部にブレークポイントを設定すると、スタック トレースを監視できます :)

 function alert(message) {
     var x = 'whatever';
 }


 $(function () {
     alert('test');
 });
于 2012-04-09T08:53:08.310 に答える