本指南將說明工作,這項進階功能可用來自訂 analytics.js 驗證、建構及傳送 Measurement Protocol 要求的方式。
總覽
每次呼叫 send
指令時,analytics.js 都會執行一系列工作,讓使用者瀏覽器驗證和建構 Measurement Protocol 要求,並傳送該要求至 Google Analytics (分析)。下表將逐一說明這些工作執行的順序:
工作名稱 | 說明 |
---|---|
customTask |
根據預設,這項工作不會執行任何動作。覆寫以提供自訂行為。 |
previewTask |
如果網頁只是轉譯,為 Safari 產生「熱門網站」縮圖,系統會取消要求。 |
checkProtocolTask |
如果網頁通訊協定不是 http 或 https ,系統就會取消要求。 |
validationTask |
如果必填欄位遺失或無效,則會取消要求。 |
checkStorageTask |
如果追蹤器設為使用 Cookie,但使用者的瀏覽器已停用 Cookie,系統就會取消要求。 |
historyImportTask |
從 ga.js 和 urchin.js Cookie 匯入資訊,以便在網站遷移至通用 Analytics (分析) 時保留訪客記錄。 |
samplerTask |
根據這個追蹤器的 sampleRate 設定取樣訪客。 |
buildHitTask |
建立 Measurement Protocol 要求字串,並儲存在 hitPayload 欄位中。 |
sendHitTask |
將儲存在 hitPayload 欄位中的 Measurement Protocol 要求傳送至 Google Analytics (分析) 伺服器。 |
timingTask |
根據這個追蹤程式的 siteSpeedSampleRate 設定,自動產生網站速度命中。 |
displayFeaturesTask |
如果已啟用多媒體廣告功能,且先前的命中沒有在廣告功能 Cookie (_gat) 設定的逾時期限內傳送,就會傳送額外的命中。 |
每項工作都是以 JavaScript 函式形式實作,並將單一模型參數做為輸入。模型是一個簡單的物件,可讓您存取 Analytics.js 欄位參考資料中定義的任何欄位。
您可以使用標準追蹤工具 get
和 set
方法存取或取代工作。使用這些方法,您可以將工作取代為自己的自訂函式,或鏈結自訂函式,以便在現有工作之前或之後執行,藉此擴充現有的功能。
導入作業
本節說明如何為現有工作新增功能、將內建工作函式換成您的自訂程式碼,或完全停用工作函式。
覆寫工作
如要覆寫工作,您可以將其值 set
做為執行不同動作的函式。覆寫工作的常見原因是測試 analytics.js 實作項目時,使用 stub 功能。
下列程式碼會將 sendHitTask
替換成可將命中酬載記錄到控制台的函式:
ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'sendHitTask', function(model) {
console.log(model.get('hitPayload'));
});
正在新增至工作
如要插入新功能,您可以將自訂工作函式鏈結為在現有工作前後執行。在以下範例中,將 sendHitTask
換成自訂工作函式,該函式會先呼叫原始的 sendHitTask
函式將一般要求信標傳送至 google-analytics.com/collection,然後執行自訂程式碼,將 Measurement Protocol 要求的副本傳送至本機伺服器。
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
// Grab a reference to the default sendHitTask function.
var originalSendHitTask = tracker.get('sendHitTask');
// Modifies sendHitTask to send a copy of the request to a local server after
// sending the normal request to www.google-analytics.com/collect.
tracker.set('sendHitTask', function(model) {
originalSendHitTask(model);
var xhr = new XMLHttpRequest();
xhr.open('POST', '/localhits', true);
xhr.send(model.get('hitPayload'));
});
});
ga('send', 'pageview');
取消工作處理
工作可以藉由擲回例外狀況來取消後續工作的處理作業。如果擲回例外狀況的工作在 sendHitTask
之前執行,就能防止 Measurement Protocol 要求傳送至 Google Analytics (分析) 伺服器。在以下範例中,只要使用者的瀏覽器包含名為「testing」且值為「true」的 Cookie,我們就會取消請求。
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
var originalBuildHitTask = tracker.get('buildHitTask');
tracker.set('buildHitTask', function(model) {
if (document.cookie.match(/testing=true/)) {
throw 'Aborted tracking for test user.';
}
originalBuildHitTask(model);
});
});
ga('send', 'pageview');
停用工作
如要停用任何內建工作函式,請將其替換為空值。
ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disables file protocol checking.
ga('send', 'pageview');