Можно ли прочитать ExperimentId и VariationId в Javascript с помощью Google Optimize?

Я создал A/B-тест с помощью Google Optimize. Теперь я хотел бы прочитать текущий экспериментId и variableId в Javascript. Моя цель - запустить разные javascript на основе данного варианта.

Я не могу найти информацию об этом в документации. Возможно ли это?

Ответы

Ответ 1

РЕДАКТИРОВАТЬ: Не верьте моему ответу на cookie ниже, я нашел лучшее решение.

Просто сделайте следующее:

var propertyId = "UA-1234567-33";
var experimentId = Object.keys(gaData[propertyId].experiments)[0];
var variationId = gaData[propertyId].experiments[experimentId];

Старый ответ:

(Не делайте этого.. держите его здесь для справки)

Ответ Maximes работает, но не совсем то, что я искал. Я хотел бы найти экспериментId и variId без добавления кода через визуальный редактор. Наконец я нашел способ.

Значения хранятся в файле cookie _gaexp. Файл cookie присутствует, когда выполняется эксперимент. Вы можете проверить его в Chrome, открыв инструменты разработчика, перейдя на вкладку "Приложение" и нажав "Куки" в левой панели. Это выглядит примерно так:

GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1

Идентификатор эксперимента является частью после второго номера:

S0SJOWxJTVO1tM2QKD2NcQ

Идентификатор изменения - это последнее число:

1

Я написал этот код, чтобы извлечь его из файла cookie:

function getCookieValue(cookieName) {
    var result = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)');
    return result ? result.pop() : '';
}

function getExperimentId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[2];
    }
}

function getVariationId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[4];
    }
}

var experimentId = getExperimentId();
var variationId = getVariationId();

ПРЕДУПРЕЖДЕНИЕ: Извлечение идентификатора эксперимента и его изменения. Из файла cookie это не очень хорошая идея. По двум причинам.

  • Когда эксперимент закончен, файл cookie все еще присутствует. Файл cookie кэшируется, поэтому вы найдете экспериментId и variableId, который не применяется, и вы не можете знать, работает ли эксперимент или нет.
  • Если вы остановите эксперимент A и начните эксперимент B, старое значение для A по-прежнему будет частью файла cookie. Поэтому он будет выглядеть примерно так:

GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1! vr1mB2L2RX6kSI1ZnUDTzT.18721.0

который будет таким же, каким он будет выглядеть, если бы вы сразу экспериментировали с экспериментами. Это затрудняет рассуждение о том, какой эксперимент использовать.

Ответ 2

Google Optimize позволяет запускать произвольные JS на основе каждого элемента DOM.

Эта функция предназначена для изменения элементов DOM, но там ничего не мешает вам использовать ее для вызова функции JS или определения некоторых переменных.

Как настроить script

  • Измените вариант эксперимента в редакторе.
  • Нажмите значок "Выбрать элементы" (прямоугольник в верхнем левом углу)
  • В поле "Выбор элемента" введите тело.
  • Нажмите кнопку "Добавить изменение" и выберите "Javascript". Это вызовет диалог, который позволит вам ввести функцию JS, которая будет вызываться для тела.
  • Вставьте код, который вы хотите запустить там.

Какой код для запуска

Предполагая, что на вашей странице задан метод doSomething(), вы можете заставить функцию Google Optimized выглядеть примерно так:

doSomething("Experiment #1", "Variant A");

В качестве альтернативы вы можете попытаться определить свои переменные глобально.

// We need to use `windows` here, because if we define a variable 
// with `var`, it will be limited to the scope of the Google Optimize
// function.
window["google_optimize_exp_id"] = "Experiment #1";
window["google_optimize_exp_var_id"] = "Variant A";

Если вы используете второй метод, имейте в виду, что вам нужно подождать, пока функция Google Optimized не будет запущена до запуска вашей собственной логики.