Задачи

Это руководство посвящено заданиям – расширенной функции, которая позволяет настраивать проверку, создание и отправку запросов Measurement Protocol с помощью analytics.js.

Обзор

При каждом вызове команды send скрипт analytics.js выполняет серию заданий по проверке, созданию и отправке запросов Measurement Protocol из браузера пользователя на серверы Google Аналитики. В таблице ниже все эти задания перечислены в порядке их выполнения.

Название задания Описание
customTask По умолчанию не делает ничего. Переопределите, чтобы указать нужное действие.
previewTask Прерывает выполнение запроса, если страница отображается только для того, чтобы создать значок "Топ-сайты" для браузера Safari.
checkProtocolTask Прерывает выполнение запроса, если на странице не используется ни http, ни https.
validationTask Прерывает выполнение запроса, если обязательные поля отсутствуют или недействительны.
checkStorageTask Прерывает выполнение запроса, если в трекере настроено использование файлов cookie, но в браузере пользователя они отключены.
historyImportTask Импортирует информацию из файлов cookie ga.js и urchin.js при внедрении на сайте кода Universal Analytics, чтобы сохранить историю действий посетителя.
samplerTask Производит выборку посетителей в соответствии со значением sampleRate, установленным для этого счетчика.
buildHitTask Создает строку запроса Measurement Protocol и сохраняет ее в поле hitPayload.
sendHitTask Отправляет на серверы Google Аналитики запрос Measurement Protocol из поля hitPayload.
timingTask Автоматически создает маркер времени загрузки сайта на основе значения siteSpeedSampleRate, установленного для этого счетчика.
displayFeaturesTask Отправляет дополнительное обращение, если функции для контекстно-медийной сети включены и предыдущее обращение не отправлено в течение периода ожидания, заданного в файле cookie _gat.

Каждое из этих заданий реализовано как функция JavaScript, принимающая в качестве входных данных один параметр модели. Модель представляет собой простой объект, который обеспечивает доступ к полям, описанным в Справке по полям analytics.js.

Получить доступ к заданиям или заменить их можно с помощью стандартных методов счетчика get и set. С помощью этих методов вы можете заменить стандартные задания собственными функциями или же добавить функции, которые нужно выполнить до или после существующего задания.

Реализация

Далее описывается, как добавить новые функции к существующим заданиям, заменить встроенные функции своими собственными или отключить их.

Переопределение задания

Чтобы переопределить задание, назначьте для него другую функцию с помощью метода set. Обычно переопределение используется для замены функции (метод stub) при тестировании реализаций analytics.js.

В приведенном ниже примере sendHitTask заменяется функцией, которая регистрирует полезную нагрузку обращений к консоли.

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'sendHitTask', function(model) {
  console.log(model.get('hitPayload'));
});

Добавление новых функций к заданиям

Новые функции можно добавить до или после существующего задания. В приведенном ниже примере мы заменяем sendHitTask собственной функцией, которая сначала вызывает исходную функцию sendHitTask, отправляющую маркер запроса в google-analytics.com/collection, а затем выполняет код, передающий копию запроса протокола на локальный сервер.

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, то запрос протокола передачи статистических данных не будет отправлен на серверы Google Аналитики. В приведенном ниже примере мы отменяем выполнение запроса каждый раз, когда в браузере пользователя обнаруживается файл cookie с названием testing и значением true.

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');

Отключение задания

Чтобы отменить любую стандартную функцию задания, подставьте вместо нее null.

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disables file protocol checking.
ga('send', 'pageview');