Понимание API Optimizely

Я пытаюсь лучше понять, как работает API api. Я новичок. Поэтому, пожалуйста, извините, если я спрашиваю что-то очень очевидное.

Но я думал, что API работает с использованием оптимизируемого объекта, который имеет два метода get и push, и объекта данных. Но потом я увидел этот код на сайте optimizely, который, похоже, назначает переменные windows[optimizely] массиву [ ]. Разве это не должно быть { }, а не []. Пожалуйста помоги

var activated = function(event) {
// The Optimizely snippet has been activated.
var visitorId = window.optimizely.get('visitor_id').randomId;
console.log("The visitor ID is: " + visitorId);
};

window["optimizely"] = window["optimizely"] || []; 
// SHOULDN"T THE ABOVE BE **window["optimizely"] = window["optimizely"] || {}
window["optimizely"].push({
type: "addListener",
filter: {
  type: "lifecycle",
  name: "activated"
},
// Add the activated function as a handler.
handler: activated
});

window["optimizely"].push(['trackEvent', 'watchedVideo']);

1 ответ

(Ниже приведено описание JS API-интерфейса фрагмента Optimizely.)

Для тех, кто хочет взаимодействовать с API-интерфейсом фрагмента Optimizely, необходимо помнить о двух этапах выполнения:

  1. Предварительная инициализация: время до того, как браузер оценивает фрагмент Optimizely. У большинства людей есть <script> тег в <head> документа, и он оценивается синхронно. В этом случае весь код JS, появляющийся над script тег это код, который попадает в эту фазу.
  2. После инициализации: время после оценки фрагмента Optimizely. Для общего случая, описанного выше, это все ниже script тег. нит: это на самом деле упрощение; API JS фактически доступен немного раньше, во время инициализированного перехвата жизненного цикла.

В некоторых случаях требуется "предварительно выдвинуть" или поставить в очередь вызовы API до инициализации Optimizely (т. Е. На этапе 1 выше). В то время вы можете написать JS, который устанавливает window.optimizely к массиву вызовов API (каждый из которых является объектом).

Во время первоначальной оценки фрагмент Optimizely потребляет любые предварительно выданные вызовы API, присутствующие в window.optimizely массив (если он существует), а затем присваивает window.optimizely объект, который имеет get функция, которая задокументирована во всех документах. В результате код, который оценивается после инициализации, должен ожидать взаимодействия с инициализированным API, optimizely.get(...),

Также стоит подчеркнуть, что средства выполнения вызовов API на обеих фазах внешне похожи друг на друга: опция pre-init - это массив, поэтому push Способ; объект API, который доступен после инициализации, также имеет push метод. Оба они принимают один и тот же параметр: объект, определяющий вызов API.

В приведенном вами примере вызов API для регистрации в activated крюк жизненного цикла предварительно подталкивается к window.optimizely массив предварительно выдвинутых вызовов API. Когда браузер оценивает фрагмент, он выполнит любые такие вызовы.

Пожалуйста, дайте мне знать, если это имеет смысл или нет!

Источник: я работаю в Optimizely в команде, которой принадлежит фрагмент.

Другие вопросы по тегам