Понимание 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, необходимо помнить о двух этапах выполнения:
- Предварительная инициализация: время до того, как браузер оценивает фрагмент Optimizely. У большинства людей есть
<script>
тег в<head>
документа, и он оценивается синхронно. В этом случае весь код JS, появляющийся надscript
тег это код, который попадает в эту фазу. - После инициализации: время после оценки фрагмента 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 в команде, которой принадлежит фрагмент.