Что делает код сценария динамической аналитики?

Итак, Heap Analytics говорит мне вставить этот код, чтобы использовать их продукт —

<script type="text/javascript">
  window.heap=window.heap||[];heap.load=function(a){window._heapid=a;var b=document.createElement("script");b.type="text/javascript",b.async=!0,b.src=("https:"===document.location.protocol?"https:":"http:")+"//cdn.heapanalytics.com/js/heap.js";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(b,c);var d=function(a){return function(){heap.push([a].concat(Array.prototype.slice.call(arguments,0)))}},e=["identify","track"];for(var f=0;f<e.length;f++)heap[e[f]]=d(e[f])};
  heap.load("YOUR_APP_ID");
</script>

Что делает этот код? (за исключением всего, что связано с идентификатором приложения).

Я нашел что-то подобное в analytics.js с открытым исходным кодом.

<script type="text/javascript">
window.analytics||(window.analytics=[]),window.analytics.methods=["identify","track","trackLink","trackForm","trackClick","trackSubmit","page","pageview","ab","alias","ready","group","on","once","off"],window.analytics.factory=function(t){return function(){var a=Array.prototype.slice.call(arguments);return a.unshift(t),window.analytics.push(a),window.analytics}};for(var i=0;i<window.analytics.methods.length;i++){var method=window.analytics.methods[i];window.analytics[method]=window.analytics.factory(method)}window.analytics.load=function(t){var a=document.createElement("script");a.type="text/javascript",a.async=!0,a.src=("https:"===document.location.protocol?"https://":"http://")+"d2dq2ahtl5zl1z.cloudfront.net/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n)},window.analytics.SNIPPET_VERSION="2.0.8",
window.analytics.load("YOUR_WRITE_KEY");
window.analytics.page();
</script>

Это делает что-то подобное? (на первый взгляд так и есть)


person praks5432    schedule 27.03.2014    source источник
comment
Такой инструмент, как jsbeautifier.org, может помочь прояснить некоторые подобные загадки.   -  person Scott Sauyet    schedule 28.03.2014


Ответы (2)


Вот фрагмент по состоянию на май 2021 года:

window.heap = window.heap || [], heap.load = function (e, t) {
  window.heap.appid = e, window.heap.config = t = t || {};
  var r = document.createElement("script");
  r.type = "text/javascript", r.async = true, r.src = "https://cdn.heapanalytics.com/js/heap-" + e + ".js";
  var a = document.getElementsByTagName("script")[0];
  a.parentNode.insertBefore(r, a);
  for (var n = function (e) {
    return function () {
      heap.push([e].concat(Array.prototype.slice.call(arguments, 0)));
    };
  }, p = ["addEventProperties", "addUserProperties", "clearEventProperties", "identify", "resetIdentity", "removeEventProperty", "setEventProperties", "track", "unsetEventProperty"], o = 0; o < p.length; o++) heap[p[o]] = n(p[o]);
};

heap.load("YOUR_APP_ID");

Во-первых, он определяет глобальный объект heap.

Затем он определяет метод heap.load. heap.load сначала устанавливает идентификатор вашего приложения e и параметры t в объект window.heap для будущего использования.

Затем он создает новый элемент скрипта для загрузки скрипта отслеживания heap.js. heap.js отправляет данные о событиях в кучу.

После начала загрузки heap.js heap.load отключает следующие методы, чтобы их можно было вызвать до завершения загрузки heap.js:

heap.addEventProperties
heap.addUserProperties
heap.clearEventProperties
heap.identify
heap.resetIdentity
heap.removeEventProperty
heap.setEventProperties
heap.track
heap.unsetEventProperty

Наконец, скрипт вызывает ранее определенный heap.load с идентификатором вашего приложения. :)

Дополнительную информацию можно найти в документации для разработчиков Heap.

person drewinglis    schedule 27.03.2014

Он печатает встроенный вызов Javascript на страницу, которая ссылается, загружает и инициализирует сценарий отслеживания внешней аналитики с параметрами, характерными для вашего веб-сайта (такими как параметры отслеживания и идентификатор).

person Ennui    schedule 27.03.2014
comment
ааа ладно - так второй скрипт тоже это делает? Или это на самом деле добавление обработчиков событий? - person praks5432; 28.03.2014
comment
Мне кажется, что он определяет настраиваемые события для отслеживания или, по крайней мере, их инициализирует. Стоит отметить, что внедрение скрипта таким образом (вместо того, чтобы просто ссылаться на внешний скрипт обычным образом) позволяет загружать его асинхронно и не зависит от протокола (так что вам не нужно беспокоиться о http против https) - person Ennui; 28.03.2014