12

Internet Explorer 7ですべてのJavaScriptイベントをデバッグまたはトレースする方法はありますか?

テキスト選択後のスクロールを妨げるバグがあり、どのイベントまたはアクションがバグを作成するのかわかりません。たとえば、マウスを動かしたときにトリガーされるイベントを確認したいのですが。

ソースを再配線するのは大変な作業であり、トリガーされたすべてのイベントを表示するスニファのようなものがあればいいのにと思いました。

4

10 に答える 10

11

onXYZ 関数が定義されているページ上のすべての要素をループし、それらにトレースを追加します。

var allElements = document.all; // Is this right? Anyway, you get the idea.

for (var i in allElements) {
    if (typeof allElements[i].onblur == "function") {
        var oldFunc = allElements[i].onblur;
        allElements[i].onblur = function() {
             alert("onblur called");
             oldFunc();
        };
    }
}
于 2008-09-18T13:03:27.827 に答える
2

Visual Studio 2008 とその機能を試して、JavaScript コードをデバッグすることをお勧めします。

問題が Internet Explorer 7 に固有のものではなく、Firefox でも発生する場合、JavaScript コードをデバッグするもう 1 つの良い方法は、Firefox と、 JavaScript デバッガーを備えたFirebugアドオンです。次に、イベント チェーンを台無しにするアラートを使用する代わりにconsole.log、JavaScript コードにステートメントを配置して、Firebug のコンソール ウィンドウで出力を確認することもできます。

于 2008-09-18T10:13:19.000 に答える
2

@[nickf] - document.allInternet Explorer 固有の拡張機能であると確信しています。

イベント ハンドラーをアタッチする必要があります。イベントを「監視」する方法はありません。Microsoft Ajax ライブラリの jQuery のようなフレームワークは、イベント ハンドラーを追加するメソッドを簡単に提供します。jQuery は、そのセレクター フレームワークが優れているためです。

次に、Firebug (Firefox 拡張機能) を使用して、ブレークポイントを設定します。Firebug は、Visual Studio 2008 よりもセットアップと破棄がはるかに簡単です。

于 2008-09-18T13:07:01.470 に答える
1

Borkdude 氏は次のように述べています。

Visual Studio 2008 とその機能を試して、JavaScript コードをデバッグすることをお勧めします。

私はイベント処理を何度もハッキングしてきました。私の意見では、従来のステッピング デバッガーは長いコード実行を追跡するのに役立ちますが、イベントの追跡には適していません。マウス移動イベントをリッスンし、各イベントで別のアプリケーションに侵入することを想像してみてください...したがって、この場合、ログを記録することを強くお勧めします。

問題が Internet Explorer 7 に固有のものではなく、Firefox でも発生する場合、JavaScript コードをデバッグするもう 1 つの良い方法は、Firefox と、 JavaScript デバッガーを備えたFirebugアドオンです。

また、Internet Explorer 用のFirebug Liteもあります。使う機会がありませんでしたが、あります。:-) 欠点は、本格的なデバッガーではないことですが、window.console オブジェクトがあり、まさに必要なものです。

于 2008-09-18T12:50:04.257 に答える
0

私が好きなことの 1 つは、イベント専用のバインド関数 ( Prototypeライブラリにあるものなど) を JavaScript で作成して、「イベント」オブジェクトをバインドされた関数に渡すことです。ここで、これを行う場合は、それを使用するすべてのハンドラーに対して呼び出されるトレース呼び出しを単純にスローすることができます。そして、不要になったら削除します。一箇所。簡単。

ただし、トレース ステートメントをどのように呼び出すかに関係なく、それを表示する必要があります。最良の戦略は、トレース呼び出しを処理する別のペインまたはウィンドウを用意することです。Dojo Toolkitには、Internet Explorer で実行される組み込みのコンソールがあり、他にも同様のものがあります。これを行う古典的な方法は、新しいウィンドウを作成してそこにdocument.write移動することです。

  • 各トレースに日時を添付することをお勧めします。以前はかなりお世話になりました。
  • デバッグとアラートは、通常のイベント フローを中断するため、通常は役に立ちません。
于 2008-09-18T10:20:48.500 に答える
0

これは基本的なことですが、何かをトリガーしたときにアラートまたは document.write 呼び出しを貼り付けることができます。

于 2008-09-18T10:12:36.553 に答える
0

正確なコードはわかりませんが (複雑な JavaScript コードを書いてからしばらく経ちます)、フォーム上のすべてのコントロールを列挙し、イベントがトリガーされたときに何かを出力するイベントを添付することができます。

匿名関数を使用して、どのイベントがトリガーされたかを識別するために必要な情報をラップすることもできます。

于 2008-09-18T10:14:21.930 に答える
0

明らかな方法は、次のようなさまざまなイベントに対していくつかのアラートを設定することです。

element.onclick = function () { alert('クリックイベント'); }

それ以外の場合は、アラートをdomのどこかに挿入するという、あまり邪魔にならないオプションがあります。

ただし、jQueryなどのライブラリを使用して機能を実装することを真剣に検討してください。クロスブラウザーの問題の多くは解決済みの問題であり、再度解決する必要はありません。あなたが達成しようとしている機能が正確にはわかりませんが、使用できる jQuery のスクロールおよび選択プラグインはおそらくたくさんあります。

于 2008-09-18T10:14:59.527 に答える
0

Matt Berseth は、トレース コンソール AjaxControlToolkit コントロールを使用した ASP.NET AJAX アプリケーションのデバッグで探しているようなものを持っています。

これは、Yahoo YUIロガーであるYUI 2: Loggerに基づいています。

于 2008-09-18T10:34:52.473 に答える
-1

私の提案は、FireFox を FireBug と一緒に使用し、組み込みの Debug/Trace オブジェクトを使用することです。彼らは魅力です。

于 2008-09-18T13:10:06.860 に答える