2014-03-27 12 views
5

So Heap Analytics sagt mir diesen Code einzufügen, um ihr Produkt zu verwenden -Was macht der Skriptcode von 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> 

Was bedeutet dieser Code tun? (abgesehen von allen App-ID-Zeug).

fand ich etwas ähnliches in der Open-Source-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> 

Ist das ähnlich, etwas zu tun? (auf einen Blick sieht es so aus)

+0

Ein Tool wie http://jsbeautifier.org/ kann helfen, einige Geheimnisse wie dieses zu klären. –

Antwort

4

@ Ennui hat es meistens richtig. Lassen Sie uns für Stück das Drehbuch Stück durchlaufen:

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"); 

Das erste, was das Skript tut, ist ein globales heap Objekt definieren.

Die zweite Sache, die das Skript tut, ist eine heap.load Methode zu definieren. heap.load setzt zuerst Ihre App-ID auf eine globale Variable, um sie für später zu speichern.

Als Nächstes wird ein neues Skriptelement zum Laden des heap.js-Tracking-Skripts erstellt. heap.js kümmert sich um die Protokollierung von Benutzerereignissen in Heap.

Nach dem Laden von heap.js definiert heap.load Stubs für zwei andere Methoden: heap.identify und heap.track. Dadurch können Sie diese Methoden aufrufen, auch wenn heap.js nicht geladen wurde. (Sie können mehr darüber lesen, was sie tun auf Heap's docs page.)

Die dritte Sache, die das Skript tut, ist heap.load mit Ihrer App-ID, die alles, was ich gerade gesprochen habe, anrufen. :)

1

Es wird ein Inline-Javascript-Aufruf auf die Seite gedruckt, die das Offsite-Analyse-Tracking-Skript mit spezifischen Parametern für Ihre Website referenziert, lädt und initialisiert (wie Tracking-Optionen und ICH WÜRDE).

+0

ahh ok - macht das auch das zweite Skript? Oder fügt das tatsächlich Ereignishandler hinzu? – praks5432

+0

Es sieht so aus, als ob benutzerdefinierte Ereignisse definiert oder zumindest initialisiert werden. Es ist erwähnenswert, dass das Injizieren eines Skripts auf diese Weise (anstatt nur auf das externe Skript in der üblichen Weise zu verweisen) es asynchron laden kann und protokollunabhängig ist (so müssen Sie sich nicht um "http" gegenüber "https" sorgen) – Ennui