手動テストだけでJavaScriptエラーを見つけるのに問題があるASP.NETサイトを実行しています。
クライアントサイドですべてのJavaScriptエラーをキャッチし、サーバーに(つまり、Webサービスなどを介して)イベントログに記録する可能性はありますか?
手動テストだけでJavaScriptエラーを見つけるのに問題があるASP.NETサイトを実行しています。
クライアントサイドですべてのJavaScriptエラーをキャッチし、サーバーに(つまり、Webサービスなどを介して)イベントログに記録する可能性はありますか?
回答:
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);
};
setInterval
メソッドでエラーが発生した場合、これはサーバーを圧倒する可能性があります。ウェブ上で利用可能な多くのJSエラー報告サービスがあります。チェックアウトErrLytics。また、Webサイトでのすべてのユーザーアクションの分析も提供します。
短い答え:はい、可能です。
より長い答え:人々は、独自のコードを書くことによってこの問題を(少なくとも部分的に)解決する方法についてすでに書いています。ただし、必要なJSコードが多くのブラウザで機能することを確認したサービスがあることに注意してください。私は以下を見つけました:
まだ試していないので、これらのサービスについて話すことはできません。
作業中のプロジェクトで、JavaScriptエラーのサーバー側エラーログを実装しました。レガシーコードと使用する新しいコードの混合があります jQuery。
window.onerror
jQueryイベントハンドラーとonready関数を組み合わせて、エラー処理関数でラップします(JavaScriptエラーの追跡:window.onerrorが十分でない理由を参照)。
window.onerror
:IEのすべてのエラー(およびFirefoxのほとんどのエラー)をキャッチしますが、SafariおよびOperaでは何もしません。エラーをキャッチしたら、それに追加のプロパティ(url、ブラウザなど)を追加し、ajax呼び出しを使用してサーバーにポストバックします。
サーバーには、投稿された引数を取り、通常のサーバーログフレームワークに出力する小さなページがあります。
(jQueryプラグインとして)このためのコードをオープンソースにしたいと思います。興味のある方はお知らせください。上司を説得するのに役立ちます。
Google Analyticsを使用している場合は、JavaScriptエラーをGoogle Analyticsイベントに記録できます。
このアプリを参照してください。 http //siteapps.com/app/log_javascript_errors_with_ga-181
それが役に立てば幸い。
また、TraceToolユーティリティを使用することをお勧めします。JavaScriptのサポートが付属しており、JS監視に非常に便利です。
クライアント側のエラーをサーバーに記録する場合は、なんらかのサーバー処理を行う必要があります。最善の策は、JavaScript(AJAX)を介してアクセスできるWebサービスを用意し、エラーログ情報を渡すことです。
問題がWebサービスをホストしているWebサーバーにある場合、問題は100%解決しません。他のオプションは、クエリ文字列を介して標準ページを介して情報を送信することです。これは、ブラウザーが画像のソースをロードしようとするため、動的に生成される画像タグ(その後削除されます)を介して行われます。ただし、クロスドメインのJavaScript呼び出しをうまく処理します。画像がオフになっていると問題が発生することに注意してください;)
可能性としては、try / catchからサーバーへのAjax呼び出しを行うことができますが、それはおそらくあなたができる最善のことです。
代わりにJavaScriptユニットテストを提案できますか?おそらくJSUnitで?