0

我试图更好地理解优化 api 是如何工作的。我是新手。因此,如果我要问一些非常明显的问题,请原谅。

但我认为 API 通过使用具有 get 和 push 两种方法的优化对象和一个数据对象来工作。但是后来我在优化站点上看到了这段代码,该代码似乎将变量 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']);
4

1 回答 1

4

(以下是指 Optimizely X snippet JS API。)

对于那些寻求与 Optimizely 片段的 API 交互的人来说,有两个执行阶段需要牢记:

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

在某些情况下,希望在 Optimizely 初始化之前(即,在上面的阶段 1 期间)“预推送”或排队调用 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 的拥有该片段的团队工作。

于 2017-08-17T18:46:23.733 回答