谷歌Analytics(分析)是最流行的網(wǎng)站統(tǒng)計服務(wù)。它有多種用途:跟蹤訪問者的會話活動和事件。 (注* 盡管谷歌在中國無法訪問,但它的分析服務(wù)中可用的,訪問分析管理界面需要借助代理。) 它能夠跟蹤任何事件。因此我們可以通過谷歌Analytics(分析)發(fā)送和跟蹤任何數(shù)據(jù)。其中最重要的一個應(yīng)用場景就是,為Web開發(fā)人員分析網(wǎng)頁上可能產(chǎn)生或未發(fā)現(xiàn)的錯誤和異常。 到目前為止,谷歌提出了2種方式跟蹤事件方式:
我們來看一看JavaScript,AngularJS和jQuery的異常跟蹤。 經(jīng)典的ga.js當(dāng)你正在使用谷歌分析時,它會以下面的方式進行工作: var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']); _gaq.push(['_trackPageview']); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); JavaScript錯誤error下面的代碼將會把所有JS拋出的錯誤(錯誤信息和發(fā)生錯誤的時間)信息發(fā)送給GA; navigator.userAgent 提供用戶瀏覽器的信息,將有助于簡化分析異常發(fā)生的原因。 //純JavaScript錯誤處理程序 window.addEventListener('error', function (err) { var lineAndColumnInfo = err.colno ? ' line:' + err.lineno +', column:'+ err.colno : ' line:' + err.lineno; _gaq.push([ '_trackEvent', 'JavaScript Error', err.message, err.filename + lineAndColumnInfo + ' -> ' + navigator.userAgent, 0, true ]); }); AngularJS異常處理程序AngularJS通過exceptionHandler捕捉所有未捕獲的異常。 // AngularJS錯誤處理程序 angular.module('loggerApp') .config(function ($provide) { $provide.decorator("$exceptionHandler", function ($delegate) { return function (exception, cause) { $delegate(exception, cause); _gaq.push([ '_trackEvent', 'AngularJS error', exception.message, exception.stack, 0, true ]); }; }); }); jQuery異常jQuery提供.error()方法,它將幫助開發(fā)者捕獲異常。 // jQuery的錯誤處理程序(jQuery的API) jQuery.error = function (message) { _gaq.push([ '_trackEvent', 'jQuery Error', message, navigator.userAgent, 0, true ]); } jQuery的AJAX錯誤處理程序每當(dāng)用一個Ajax請求發(fā)生錯誤時,jQuery就會觸發(fā)ajaxError事件。 // jQuery的AJAX錯誤處理程序(jQuery的API) $(document).ajaxError(function (event, request, settings) { _gaq.push([ '_trackEvent', 'jQuery Ajax Error', settings.url, JSON.stringify({ result: event.result, status: request.status, statusText: request.statusText, crossDomain: settings.crossDomain, dataType: settings.dataType }), 0, true ]); }); 新版analytics.js如果您使用的是新牌的API,它可能像下面這樣: (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-XXXXXXXX-X', 'auto'); ga('send', 'pageview'); 下面是在新版analytics.js代碼上,追蹤錯誤異常。 JavaScript錯誤window.addEventListener('error', function (err) { var lineAndColumnInfo = err.colno ? ' line:' + err.lineno +', column:'+ err.colno : ' line:' + err.lineno; ga( 'send', 'event', 'JavaScript Error', err.message, err.filename + lineAndColumnInfo + ' -> ' + navigator.userAgent, 0, true ); }); AngularJS異常處理程序// AngularJS錯誤處理程序 angular.module('loggerApp') .config(function ($provide) { $provide.decorator("$exceptionHandler", function ($delegate) { return function (exception, cause) { $delegate(exception, cause); ga( 'send', 'event', 'AngularJS error', exception.message, exception.stack, 0, true ); }; }); }); jQuery的錯誤// jQuery的錯誤處理程序(jQuery的API) jQuery.error = function (message) { ga( 'send', 'event', 'jQuery Error', message, navigator.userAgent, 0, true ); } jQuery的AJAX錯誤處理程序// jQuery的AJAX錯誤處理程序(jQuery的API) $(document).ajaxError(function (event, request, settings) { ga( 'send', 'event', 'jQuery Ajax Error', settings.url, JSON.stringify({ result: event.result, status: request.status, statusText: request.statusText, crossDomain: settings.crossDomain, dataType: settings.dataType }), 0, true ); }); 完整的示例如下: 經(jīng)典版 http:///malyw/pen/myLPeJ 在GA中檢驗數(shù)據(jù)在GA中你可以找到兩種主要的事件報告 實時在線事件 普通事件報告 原文地址:點此 |
|
來自: codingparty > 《WEB》