了解 Optimizely API

Agi*_*ing 1 javascript api optimizely

我试图更好地理解optimize 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']);
Run Code Online (Sandbox Code Playgroud)

Spe*_*son 5

(以下内容参考Optimizely X snippet JS API。)

对于那些寻求与 Optimizely 代码片段的 API 进行交互的人,需要记住两个执行阶段:

  1. 预初始化:浏览器评估 Optimizely 代码片段之前的时间。大多数人<script><head>文档中都有标签,并且它是同步评估的。在这种情况下,标签上方出现的所有 JS 代码script都是属于该阶段的代码。
  2. 初始化后: Optimizely 代码片段评估后的时间。对于上述常见情况,这是script标签下方的所有内容。nit:这实际上是一种简化;JS API 实际上稍微早一点就可用了,在初始化生命周期钩子之前。

在某些情况下,人们希望在 Optimizely 初始化之前(即在上述第一阶段期间)“预推送”或排队对 API 的调用。那时,您可以编写设置window.optimizely为 API 调用数组(每个数组都是一个对象)的 JS。

在初始评估期间,Optimizely 代码片段会使用数组中存在的任何预推送 API 调用window.optimizely(如果存在),然后分配给具有整个文档中记录的函数的window.optimizely对象。get因此,在初始化后评估的代码应该能够与初始化的 API 交互optimizely.get(...)

还值得强调的是,在两个阶段中进行 API 调用的方式表面上相似:pre-init 选项是一个数组,因此有一个push方法;初始化后可用的 API 对象有一个push方法。它们都采用相同的参数:定义 API 调用的对象。

在您提供的示例中,用于注册activated生命周期挂钩的 API 调用已预先推送到window.optimizely预先推送的 API 调用数组中。当浏览器评估代码片段时,它将执行任何此类调用。

请告诉我这是否有意义!

来源:我在 Optimizely 的拥有该代码片段的团队中工作。