web-dev-qa-db-ja.com

サーバーでのクライアント側JavaScriptエラーのログ記録

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

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

91
MADMap

onerror event の独自のハンドラーを設定して、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);
};
67
Jonny Buchanan

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

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

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

26
Ztyx

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

window.onerrorの組み合わせを使用し、jQueryイベントハンドラーとonready関数をエラー処理関数でラップします( JavaScriptエラートラッキング:window.onerrorが不十分な理由 を参照)。

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

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

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

このコードを(jQueryプラグインとして)オープンソースにしたいと思います。誰もが興味を持っているなら私に知らせてください、それは上司を説得するのに役立ちます!

12
Karl

Google Analyticsを使用している場合、JavaScriptエラーをGoogle Analyticsイベントに記録できます。

このアプリを参照してください: http://siteapps.com/app/log_javascript_errors_with_ga-181

それが役に立てば幸い。

1
Leandro Lages

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

0
levelnis

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

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

0
Aaron Powell

Try/catchからサーバーへのAjax呼び出しを潜在的に行うことができますが、おそらくそれはあなたができる最善のことです。

代わりにJavaScriptの単体テストを提案できますか?おそらく JSUnit

0
Mike Stone

また、 Trace Tool ユーティリティを使用することをお勧めします。JavaScriptサポートが付属しているため、JSの監視に非常に便利です。

0
cleg