javascript - 堆分析的脚本代码有什么作用?

标签 javascript events analytics web-analytics

所以 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>

这段代码有什么作用? (除了所有应用程序 ID 的东西)。

我在开源的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>

这是在做类似的事情吗? (乍一看好像是)

最佳答案

以下是截至 2021 年 5 月的摘要:

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 首先将您的应用程序 ID e 和选项 t 设置到 window.heap 对象以供将来使用。

接下来,它创建一个新的脚本元素来加载 heap.js 跟踪脚本。 heap.js 将事件数据发送到 Heap。

heap.js 开始加载后,heap.load 将以下方法 stub ,以便在 heap.js 完成加载之前调用它们:

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

最后,脚本使用您的应用程序 ID 调用先前定义的 heap.load。 :)

您可以在 Heap's developer documentation 上阅读更多内容.

关于javascript - 堆分析的脚本代码有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698991/

相关文章:

regex - 如何从正则表达式匹配中排除某些网址

PostgreSQL 营销报告

javascript - jQuery 实时验证

javascript - 为什么索引变量在 Angular 2 的 *ngFor 循环中不显示索引?

javascript - 使用 Rails 将数据填充到 Google map 上

javascript - 递归下降解析器应该在重复的字母终端上出错

javascript - AngularJS : Directive Scope Update & click event

c# - 将额外参数传递给事件处理程序?

c# - 在引擎盖下使用弱引用实现 C# 事件是个好主意吗?

java - Google AnalyticsService 抛出 java.lang.reflect.UndeclaredThrowableException