工作

本指南將說明工作,這項進階功能可用來自訂 analytics.js 驗證、建構及傳送 Measurement Protocol 要求的方式。

總覽

每次呼叫 send 指令時,analytics.js 都會執行一系列工作,讓使用者瀏覽器驗證和建構 Measurement Protocol 要求,並傳送該要求至 Google Analytics (分析)。下表將逐一說明這些工作執行的順序:

工作名稱 說明
customTask 根據預設,這項工作不會執行任何動作。覆寫以提供自訂行為。
previewTask 如果網頁只是轉譯,為 Safari 產生「熱門網站」縮圖,系統會取消要求。
checkProtocolTask 如果網頁通訊協定不是 httphttps,系統就會取消要求。
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 欄位參考資料中定義的任何欄位。

您可以使用標準追蹤工具 getset 方法存取或取代工作。使用這些方法,您可以將工作取代為自己的自訂函式,或鏈結自訂函式,以便在現有工作之前或之後執行,藉此擴充現有的功能。

導入作業

本節說明如何為現有工作新增功能、將內建工作函式換成您的自訂程式碼,或完全停用工作函式。

覆寫工作

如要覆寫工作,您可以將其值 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');