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

pra*_*432 5 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>
Run Code Online (Sandbox Code Playgroud)

这段代码有什么作用?(除非所有应用程序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>
Run Code Online (Sandbox Code Playgroud)

那是在做类似的事吗?(一眼就看起来像)

dre*_*lis 6

@Ennui大概是对的.让我们一块一块地阅读剧本:

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");
Run Code Online (Sandbox Code Playgroud)

脚本所做的第一件事就是定义一个全局heap对象.

脚本所做的第二件事就是定义一个heap.load方法.heap.load首先将您的应用程序ID设置为全局变量,以便以后保存.

接下来,它创建一个新的脚本元素来加载heap.js跟踪脚本.heap.js负责将用户事件记录到Heap.

加载heap.js后,heap.load为其他两个方法定义存根:heap.identifyheap.track.这使您即使未加载heap.js也可以调用这些方法.(您可以在Heap的文档页面上阅读更多关于他们所做的事情.)

脚本所做的第三件事就是调用heap.load你的应用程序ID,它会执行我刚刚谈到的所有内容.:)