104

手動テストだけでいくつかの JavaScript エラーを見つけるのに問題がある ASP.NET サイトを実行しています。

クライアント側ですべての JavaScript エラーをキャッチし、それらをサーバー、つまり EventLog (Web サービスなどを介して) に記録する可能性はありますか?

4

8 に答える 8

71

onerror イベント用に独自のハンドラーを設定し、XMLHttpRequest を使用してサーバーに問題の原因を伝えることもできますが、これは仕様の一部ではないため、サポートはやや不安定です。

XMLHttpRequest を使用して JavaScript エラーをログに記録する の例を次に示します。

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};
于 2008-09-23T07:12:28.917 に答える
32

短い答え:はい、可能です。

より長い答え:人々は、独自のコードを作成することでこの問題を (少なくとも部分的に) 解決する方法について既に書いています。ただし、必要な JS コードが多くのブラウザーで動作することを確認したと思われるサービスが存在することに注意してください。私は以下を見つけました:

私はまだ試していないので、これらのサービスについて話すことはできません.

于 2011-09-14T11:30:12.257 に答える
12

作業中のプロジェクトで、javascript エラーに関するサーバー側のエラー ログを実装しました。レガシー コードとjQueryを使用した新しいコードが混在しています。

window.onerrorjQuery イベント ハンドラーと onready 関数を組み合わせてラップし、エラー処理関数を使用します (「 JavaScript エラー追跡: window.onerror では不十分な理由」を参照)。

  • window.onerror: IE のすべてのエラー (および Firefox のほとんどのエラー) をキャッチしますが、Safari と Opera では何もしません。
  • jQuery イベント ハンドラー: すべてのブラウザーで jQuery イベント エラーをキャッチします。
  • jQuery Ready 関数: すべてのブラウザーで初期化エラーをキャッチします。

エラーをキャッチしたら、追加のプロパティ (url、ブラウザーなど) をいくつか追加し、ajax 呼び出しを使用してサーバーに戻します。

サーバーには、投稿された引数を取得して通常のサーバー ロギング フレームワークに出力する小さなページがあります。

このコードを (jQuery プラグインとして) オープン ソース化したいと考えています。興味のある方はお知らせください。上司を説得するのに役立ちます。

于 2008-09-23T12:20:42.590 に答える
0

私は最近Appfailを使用していますが、これはasp.netとJavaScriptの両方のエラーをキャプチャします

于 2013-02-03T19:15:32.563 に答える
0

また、 TraceToolユーティリティの使用をお勧めします。これには JavaScript がサポートされており、JS の監視に非常に便利です。

于 2008-09-23T07:21:40.983 に答える
0

try/catch からサーバーへの Ajax 呼び出しを行うこともできますが、おそらくそれが最善の方法です。

代わりに JavaScript 単体テストを提案してもよろしいですか? おそらくJSUnitで?

于 2008-09-23T06:46:00.837 に答える
0

クライアント側のエラーをサーバーに記録したい場合は、何らかのサーバー処理を行う必要があります。最善の策は、JavaScript (AJAX) 経由でアクセスできる Web サービスを用意し、エラー ログ情報をそれに渡すことです。

問題が Web サービスをホストしている Web サーバーに問題がある場合、問題を 100% 解決することはできません。他のオプションは、クエリ文字列を介して標準ページを介して情報を送信することです。これは、ブラウザが画像のソースを読み込もうとするため、画像タグを動的に生成することによって行われます (その後削除されます)。ただし、クロスドメインの JavaScript 呼び出しをうまく回避します。誰かが画像をオフにしている場合、問題が発生することに注意してください ;)

于 2008-09-23T07:42:39.840 に答える