【问题标题】:What does heap analytics' script code do?堆分析的脚本代码有什么作用?
【发布时间】:2014-05-07 02:21:02
【问题描述】:

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

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

【问题讨论】:

标签: javascript events analytics web-analytics


【解决方案1】:

这是截至 2021 年 5 月的 sn-p:

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 将以下方法存根,以便在 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 上阅读更多内容。

【讨论】:

    【解决方案2】:

    它正在打印对页面的内联 Javascript 调用,该调用使用特定于您网站的参数(如跟踪选项和 ID)从中引用、加载和初始化场外分析跟踪脚本。

    【讨论】:

    • 啊,好吧-第二个脚本也在做什么?或者这实际上是在添加事件处理程序?
    • 在我看来,它正在定义要跟踪的自定义事件,或者至少是初始化它们。值得注意的是,以这种方式注入脚本(而不仅仅是以通常的方式引用外部脚本)允许它异步加载并且是协议独立的(所以你不必担心http vs https
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多