Aktivieren des Plug-Ins für die automatische Erfassung von Klickanalysen
Application Insights JavaScript SDK Funktionserweiterungen sind Zusatzfunktionen, die dem Application Insights JavaScript SDK hinzugefügt werden können, um seine Funktionalität zu verbessern.
In diesem Artikel befassen wir uns mit dem Klickanalyse-Plug-in, das automatisch Klickereignisse auf Webseiten verfolgt und data-*
-Attribute oder benutzerdefinierte Tags von HTML-Elementen verwendet, um die Ereignistelemetrie zu füllen.
Voraussetzungen
Installieren Sie das JavaScript SDK, bevor Sie das Click Analytics-Plug-In aktivieren.
Welche Daten sammelt das Plug-In?
Die folgenden Schlüsseleigenschaften werden standardmäßig erfasst, wenn das Plug-In aktiviert ist.
Eigenschaften des benutzerdefinierten Ereignisses
Name | Beschreibung | Beispiel |
---|---|---|
Name | Der Name des benutzerdefinierten Ereignisses. Weitere Informationen zum Eintragen eines Namens finden Sie in der Beschreibung der name-Spalte. | Info |
itemType | Ereignistyp. | CustomEvent |
sdkVersion | Version des Application Insights SDK zusammen mit dem Click-Plug-In. | JavaScript:2_ClickPlugin2 |
Benutzerdefinierte Dimensionen
Name | Beschreibung | Beispiel |
---|---|---|
actionType | Aktionstyp, der das Klickereignis verursacht hat. Es kann ein Links- oder Rechtsklick sein. | CL |
baseTypeSource | Basistypquelle des benutzerdefinierten Ereignisses. | ClickEvent |
clickCoordinates | Koordinaten, an denen das Klickereignis ausgelöst wird. | 659X47 |
Inhalt | Platzhalter zum Speichern zusätzlicher data-* -Attribute und -Werte. |
[{sample1:value1, sample2:value2}] |
pageName | Titel der Seite, auf der das Klickereignis ausgelöst wird. | Beispieltitel |
parentId | ID oder Name des übergeordneten Elements Weitere Informationen zum Eintragen einer parentId finden Sie unter parentId-Schlüssel. | navbarContainer |
Benutzerdefinierte Messungen
Name | Beschreibung | Beispiel |
---|---|---|
timeToAction | Dies ist die Zeit in Millisekunden, die Benutzer*innen seit dem ersten Seitenladevorgang auf das Element klicken. | 87407 |
Hinzufügen des Plug-Ins für Klickanalyse
Benutzende können das Plug-In für die automatische Erfassung von Klickanalysen über das JavaScript (Web) SDK-Ladeprogrammskript oder npm einrichten und dann optional eine Frameworkerweiterung hinzufügen.
Hinweis
Am 31. März 2025 wird der Support für die auf Instrumentierungsschlüsseln basierende Erfassung eingestellt. Die Erfassung von Instrumentierungsschlüsseln funktioniert zwar weiterhin, wir stellen jedoch keine Updates und keinen Support mehr für das Feature bereit. Wechseln Sie zu Verbindungszeichenfolgen, damit Sie neue Funktionen nutzen können.
Hinzufügen des Codes
Fügen Sie das JavaScript (Web) SDK Loader-Skript oben auf jeder Seite ein, für die Sie Application Insights aktivieren möchten.
<script type="text/javascript" src="https://js.monitor.azure.com/scripts/b/ext/ai.clck.2.min.js"></script>
<script type="text/javascript">
var clickPluginInstance = new Microsoft.ApplicationInsights.ClickAnalyticsPlugin();
// Click Analytics configuration
var clickPluginConfig = {
autoCapture : true,
dataTags: {
useDefaultContentNameOrId: true
}
}
// Application Insights configuration
var configObj = {
connectionString: "YOUR_CONNECTION_STRING",
// Alternatively, you can pass in the instrumentation key,
// but support for instrumentation key ingestion will end on March 31, 2025.
// instrumentationKey: "YOUR INSTRUMENTATION KEY",
extensions: [
clickPluginInstance
],
extensionConfig: {
[clickPluginInstance.identifier] : clickPluginConfig
},
};
// Application Insights JavaScript (Web) SDK Loader Script code
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(n)}var x,w,D,t,E,n,C=window,O=document,b=C.location,q="script",I="ingestionendpoint",L="disableExceptionTracking",j="ai.device.";"instrumentationKey"[x="toLowerCase"](),w="crossOrigin",D="POST",t="appInsightsSDK",E=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=E),n=C[E]||function(g){var f=!1,m=!1,h={initialize:!0,queue:[],sv:"8",version:2,config:g};function v(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[j+"id"]=i[x](),n[j+"type"]=i,n["ai.operation.name"]=b&&b.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(h.sv||h.version),{time:(i=new Date).getUTCFullYear()+"-"+a(1+i.getUTCMonth())+"-"+a(i.getUTCDate())+"T"+a(i.getUTCHours())+":"+a(i.getUTCMinutes())+":"+a(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z",iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:undefined,seq:"1",aiDataContract:undefined}}var n,i,t,a,y=-1,T=0,S=["js.monitor.azure.com","js.cdn.applicationinsights.io","js.cdn.monitor.azure.com","js0.cdn.applicationinsights.io","js0.cdn.monitor.azure.com","js2.cdn.applicationinsights.io","js2.cdn.monitor.azure.com","az416426.vo.msecnd.net"],o=g.url||cfg.src,r=function(){return s(o,null)};function s(d,t){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~d.indexOf("ai.3")&&(d=d.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<S.length;e++)if(0<d.indexOf(S[e])){y=e;break}var n,i=function(e){var a,t,n,i,o,r,s,c,u,l;h.queue=[],m||(0<=y&&T+1<S.length?(a=(y+T+1)%S.length,p(d.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+S[a]+i})),T+=1):(f=m=!0,s=d,!0!==cfg.dle&&(c=(t=function(){var e,t={},n=g.connectionString;if(n)for(var i=n.split(";"),a=0;a<i.length;a++){var o=i[a].split("=");2===o.length&&(t[o[0][x]()]=o[1])}return t[I]||(e=(n=t.endpointsuffix)?t.location:null,t[I]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||g.instrumentationKey||"",t=(t=(t=t[I])&&"/"===t.slice(-1)?t.slice(0,-1):t)?t+"/v2/track":g.endpointUrl,t=g.userOverrideEndpointUrl||t,(n=[]).push((i="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",o=s,u=t,(l=(r=v(c,"Exception")).data).baseType="ExceptionData",l.baseData.exceptions=[{typeName:"SDKLoadFailed",message:i.replace(/\./g,"-"),hasFullStack:!1,stack:i+"\nSnippet failed to load ["+o+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(b&&b.pathname||"_unknown_")+"\nEndpoint: "+u,parsedStack:[]}],r)),n.push((l=s,i=t,(u=(o=v(c,"Message")).data).baseType="MessageData",(r=u.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+l+")").replace(/\"/g,"")+'"',r.properties={endpoint:i},o)),s=n,c=t,JSON&&((u=C.fetch)&&!cfg.useXhr?u(c,{method:D,body:JSON.stringify(s),mode:"cors"}):XMLHttpRequest&&((l=new XMLHttpRequest).open(D,c),l.setRequestHeader("Content-type","application/json"),l.send(JSON.stringify(s)))))))},a=function(e,t){m||setTimeout(function(){!t&&h.core||i()},500),f=!1},p=function(e){var n=O.createElement(q),e=(n.src=e,t&&(n.integrity=t),n.setAttribute("data-ai-name",E),cfg[w]);return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||a(0,t)},cfg.ld&&cfg.ld<0?O.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){O.getElementsByTagName(q)[0].parentNode.appendChild(n)},cfg.ld||0),n};p(d)}cfg.sri&&(n=o.match(/^((http[s]?:\/\/.*\/)\w+(\.\d+){1,5})\.(([\w]+\.){0,2}js)$/))&&6===n.length?(d="".concat(n[1],".integrity.json"),i="@".concat(n[4]),l=window.fetch,t=function(e){if(!e.ext||!e.ext[i]||!e.ext[i].file)throw Error("Error Loading JSON response");var t=e.ext[i].integrity||null;s(o=n[2]+e.ext[i].file,t)},l&&!cfg.useXhr?l(d,{method:"GET",mode:"cors"}).then(function(e){return e.json()["catch"](function(){return{}})}).then(t)["catch"](r):XMLHttpRequest&&((a=new XMLHttpRequest).open("GET",d),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)if(200===a.status)try{t(JSON.parse(a.responseText))}catch(e){r()}else r()},a.send())):o&&r();try{h.cookie=O.cookie}catch(k){}function e(e){for(;e.length;)!function(t){h[t]=function(){var e=arguments;f||h.queue.push(function(){h[t].apply(h,e)})}}(e.pop())}var c,u,l="track",d="TrackPage",p="TrackEvent",l=(e([l+"Event",l+"PageView",l+"Exception",l+"Trace",l+"DependencyData",l+"Metric",l+"PageViewPerformance","start"+d,"stop"+d,"start"+p,"stop"+p,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),h.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(g.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==g[L]&&!0!==l[L]&&(e(["_"+(c="onerror")]),u=C[c],C[c]=function(e,t,n,i,a){var o=u&&u(e,t,n,i,a);return!0!==o&&h["_"+c]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},g.autoExceptionInstrumented=!0),h}(cfg.cfg),(C[E]=n).queue&&0===n.queue.length?(n.queue.push(e),n.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous",
// sri: false, // Custom optional value to specify whether fetching the snippet from integrity file and do integrity check
cfg: configObj // configObj is defined above.
});
</script>
Informationen zum Hinzufügen oder Aktualisieren der Konfiguration des JavaScript (Web) SDK-Ladeprogrammskripts finden Sie unter Konfiguration des JavaScript (Web) SDK Loader-Skripts.
Tipp
Wenn Sie eine Frameworkerweiterung hinzufügen möchten oder bereits eine hinzugefügt haben, lesen Sie die Codebeispiele React, React Native und Angular, um das Click Analytics-Plug-In hinzuzufügen.
(Optional) Festlegen des authentifizierten Benutzerkontexts
Wenn Sie diese optionale Einstellung festlegen wollen, finden Sie entsprechende Informationen im Artikel zum Festlegen des authentifizierten Benutzerkontexts.
Wenn Sie eine HEART-Arbeitsmappe mit dem Click Analytics-Plug-In verwenden, müssen Sie den authentifizierten Benutzerkontext nicht festlegen, um Telemetriedaten anzuzeigen. Weitere Informationen finden Sie in der Dokumentation zur HEART-Arbeitsmappe.
Verwenden des Plug-Ins
In den folgenden Abschnitten wird beschrieben, wie Sie das Plug-In verwenden.
Telemetriedatenspeicher
Aus Klickereignissen generierte Telemetriedaten werden im Azure-Portal unter „Application Insights“ im Abschnitt „Protokolle“ als customEvents
gespeichert.
name
Die name
-Spalte von customEvent
wird auf der Grundlage der folgenden Regeln ausgefüllt:
- Wenn
customDataPrefix
nicht in der erweiterten Konfiguration deklariert ist, wird der indata-id
angegebenenid
alscustomEvent
-Name verwendet. - Wenn
customDataPrefix
deklariert wird, wird der indata-*-id
angegebeneid
, was bedeutet, dass er mitdata
beginnen und mitid
enden muss, alscustomEvent
-Name verwendet wird. Wenn das angeklickte HTML-Element z.B. das Attribut"data-sample-id"="button1"
hat, dann ist"button1"
dercustomEvent
-Name. - Wenn das Attribut
data-id
oderdata-*-id
nicht vorhanden ist und wennuseDefaultContentNameOrId
auftrue
festgelegt ist, wird das HTML-Attributid
oder der Inhaltsname des angeklickten Elements alscustomEvent
-Name verwendet. Sind sowohlid
als auch Inhaltsname vorhanden, hatid
Vorrang. - Wenn
useDefaultContentNameOrId
false
ist, lautet dercustomEvent
Name"not_specified"
. Wir empfehlen,useDefaultContentNameOrId
auftrue
zu setzen, um aussagekräftige Daten zu erzeugen.
contentName
Wenn Die die contentName
Rückruffunktion in der erweiterten Konfiguration definiert haben, wird die contentName
-Spalte des customEvent
basierend auf den folgenden Regeln aufgefüllt:
Bei einem angeklickten HTML-Element versucht das Plug-In „
<a>
“, den Wert des innerText-Attributs (Text) zu erfassen. Wenn das Plug-In dieses Attribut nicht finden kann, versucht es, den Wert des innerHtml-Attributs zu sammeln.Bei einem angeklickten
<img>
-HTML oder<area>
-Element sammelt das Plug-In den Wert desalt
-Attributs.Für alle anderen angeklickten HTML-Elemente wird
contentName
basierend auf den folgenden Regeln aufgefüllt, die in der Reihenfolge der Rangfolge aufgeführt sind:- Der Wert des
value
-Attributs für das Element - Der Wert des
name
-Attributs für das Element - Der Wert des
alt
-Attributs für das Element - Der Wert des innerText-Attributs für das Element
- Der Wert des
id
-Attributs für das Element
- Der Wert des
parentId
-Schlüssel
Um den parentId
-Schlüssel in customDimensions
der customEvent
-Tabelle in den Protokollen einzutragen, deklarieren Sie das Tag parentDataTag
, oder definieren Sie das data-parentid
-Attribut.
Der Wert für parentId
wird basierend auf den folgenden Regeln abgerufen:
- Wenn Sie
parentDataTag
deklarieren, ruft das Plug-In den Wert vonid
oderdata-*-id
, der im Element definiert ist, das dem angeklickten Element am nächsten ist, alsparentId
ab. - Wenn
data-*-id
undid
definiert sind, hatdata-*-id
Vorrang. - Wenn
parentDataTag
definiert ist, das Plug-In dieses Tag aber nicht in der DOM-Struktur finden kann, verwendet das Plug-In den Wert vonid
oderdata-*-id
, der im Element definiert ist, das dem angeklickten Element am nächsten ist, alsparentId
. Es wird jedoch empfohlen, dasdata-{parentDataTag}
- odercustomDataPrefix-{parentDataTag}
-Attribut zu definieren, um die Anzahl der erforderlichen Schleifen zum Ermitteln vonparentId
zu reduzieren. Das Deklarieren vonparentDataTag
ist nützlich, wenn Sie das Plug-In mit benutzerdefinierten Optionen verwenden müssen. - Wenn
parentDataTag
nicht definiert ist und keineparentId
-Informationen im aktuellen Element enthalten sind, wird keinparentId
-Wert erfasst. - Wenn
parentDataTag
definiert ist,useDefaultContentNameOrId
auffalse
festgelegt ist, und nur einid
-Attribut wird im Element definiert ist, das dem angeklickten Element am nächsten ist, wird"not_specified"
alsparentId
eingetragen. Um den Wert vonid
abzurufen, legen SieuseDefaultContentNameOrId
auftrue
fest.
Wenn Sie das data-parentid
- oder data-*-parentid
-Attribut definieren, ruft das Plug-In die Instanz dieses Attributs ab, das dem angeklickten Element am nächsten ist oder ggf. im angeklickten Elements vorhanden ist.
Wenn Sie parentDataTag
deklarieren und das data-parentid
- oder data-*-parentid
-Attribut definieren, hat data-parentid
bzw. data-*-parentid
Vorrang.
Wenn die Telemetriewarnung „Zeilen mit Klickereignissen ohne parentId-Wert“ angezeigt wird, finden Sie weitere Informationen unter Beheben der Warnung „Zeilen mit Klickereignissen ohne parentId-Wert“.
Beispiele, die veranschaulichen, welcher Wert als parentId
für verschiedene Konfigurationen abgerufen wird, finden Sie in den Beispielen für parentid
-Schlüssel.
Achtung
- Sobald
parentDataTag
in ein beliebiges HTML-Element in Ihrer Anwendung eingefügt wurde, beginnt das SDK mit der Suche nach übergeordneten Tags in der gesamten Anwendung und nicht nur in dem HTML-Element, in dem Sie es verwendet haben. - Wenn Sie die HEART-Arbeitsmappe mit dem Plug-In für Klickanalysen verwenden, muss das Tag
parentDataTag
in allen anderen Teilen der Anwendung eines Endbenutzers/einer Endbenutzerin deklariert werden, damit HEART-Ereignisse protokolliert oder erkannt werden können.
customDataPrefix
Die customDataPrefix
-Option in der erweiterten Konfiguration bietet dem Benutzer die Möglichkeit, ein Datenattributpräfix zu konfigurieren, um ermitteln zu können, wo sich das HEART-Ereignis in der jeweiligen Codebasis befindet. Das Präfix muss immer Kleinbuchstaben verwenden und mit data-
beginnen. Beispiel:
data-heart-
data-team-name-
data-example-
In HTML werden die globalen data-*
-Attribute als benutzerdefinierte Datenattribute bezeichnet, die den Austausch proprietärer Informationen zwischen HTML und der DOM-Darstellung durch Skripts ermöglichen. Ältere Browser wie Internet Explorer und Safari lassen Attribute fallen, die sie nicht verstehen, es sei denn, sie beginnen mit data-
.
Das Sternchen (*
) in data-*
kann durch einen beliebigen Namen ersetzt werden, der der Erstellungsregel für XML-Namen folgt. Dabei gelten die folgenden Einschränkungen:
- Der Name darf nicht mit „xml“ beginnen, egal welche Groß- und Kleinschreibung für die Buchstaben verwendet wird.
- Der Name darf kein Semikolon (U+003A) enthalten.
- Der Name darf keine Großbuchstaben enthalten.
Hinzufügen der erweiterten Konfiguration
Name | type | Standard | Beschreibung |
---|---|---|---|
autoCapture | Boolean | True | Konfiguration der automatischen Erfassung. |
Rückruf | IValueCallback | NULL | Rückrufkonfiguration. |
pageTags | Object | Null | Seitentags. |
dataTags | ICustomDataTags | NULL | Benutzerdefinierte Datentags zum Überschreiben von Standardtags, die zum Erfassen von Klickdaten verwendet werden. |
urlCollectHash | Boolean | False | Aktiviert die Protokollierung von Werten nach einem #-Zeichen in der URL. |
urlCollectQuery | Boolean | False | Aktiviert die Protokollierung der Abfragezeichenfolge der URL. |
behaviorValidator | Funktion | NULL | Rückruffunktion, die für die data-*-bhvr -Wertüberprüfung verwendet werden soll. Weitere Informationen finden Sie im Abschnitt behaviorValidator. |
defaultRightClickBhvr | Zeichenfolge (oder Zahl) | '' | Standardwert für das Verhalten, wenn ein Rechtsklickereignis eingetreten ist. Dieser Wert wird überschrieben, wenn das Element das data-*-bhvr -Attribut aufweist. |
dropInvalidEvents | Boolean | False | Flag zum Löschen von Ereignissen, die keine nützlichen Klickdaten aufweisen. |
IValueCallback
Name | type | Standard | Beschreibung |
---|---|---|---|
pageName | Funktion | NULL | Funktion, mit der Sie das Standardverhalten der pageName -Erfassung außer Kraft setzen können. |
pageActionPageTags | Funktion | NULL | Eine Rückruffunktion, um die standardmäßige pageTags , die während eines pageAction -Ereignisses gesammelt wird, zu ergänzen. |
contentName | Funktion | NULL | Eine Rückruffunktion zum Auffüllen der angepassten contentName . |
ICustomDataTags
Name | type | Standard | Standardtag für die Verwendung in HTML | Beschreibung |
---|---|---|---|---|
useDefaultContentNameOrId | Boolean | False | – | Bei Einstellung auf true wird das Standard-HTML-Attribut id für contentName erfasst, wenn ein bestimmtes Element nicht mit dem Standarddatenpräfix oder customDataPrefix getaggt ist. Andernfalls wird das Standard-HTML-Attribut id für contentName nicht erfasst. |
customDataPrefix | Zeichenfolge | data- |
data-* |
Automatische Erfassung der Inhaltsnamen und -werte von Elementen, die mit dem angegebenen Präfix gekennzeichnet sind. Beispielsweise können data-*-id und data-<yourcustomattribute> in den HTML-Tags verwendet werden. |
aiBlobAttributeTag | Zeichenfolge | ai-blob |
data-ai-blob |
Das Plug-In unterstützt JSON-Blobattribute anstelle einzelner data-* -Attribute. |
metaDataPrefix | Zeichenfolge | Null | Nicht zutreffend | Automatische Erfassung der Namen und Inhalte von META-Elementen mit dem angegebenen Präfix im HTML-Kopfteil. Beispielsweise kann custom- im HTML-META-Tag verwendet werden. |
captureAllMetaDataContent | Boolean | False | – | Automatische Erfassung der Namen und Inhalte aller META-Elemente im HTML-Kopfteil. Der Standardwert ist "false". Ist diese Option aktiviert, wird das angegebene metaDataPrefix überschrieben. |
parentDataTag | Zeichenfolge | Null | Nicht zutreffend | Ruft die parentId in den Protokollen ab, wenn data-parentid oder data-*-parentid nicht gefunden wird. Aus Effizienzgründen wird das aufwärtsgerichtete Durchlaufen des DOM zum Erfassen der Inhaltsnamen und Werte von Elementen beendet, wenn das data-{parentDataTag} - oder customDataPrefix-{parentDataTag} -Attribut gefunden wird. Weitere Informationen finden Sie unter parentId-Schlüssel. |
dntDataTag | Zeichenfolge | ai-dnt |
data-ai-dnt |
HTML-Elemente mit diesem Attribut werden vom Plug-In zum Erfassen von Telemetriedaten ignoriert. |
behaviorValidator
Die behaviorValidator
-Funktionen überprüfen automatisch, ob markierte Verhaltensweisen im Code einer vordefinierten Liste entsprechen. Die Funktionen sorgen dafür, dass die getaggten Verhaltensweisen mit der etablierten Taxonomie Ihres Unternehmens übereinstimmen. Es wird nicht verlangt oder erwartet, dass diese Funktionen von den meisten Azure Monitor-Kunden verwendet werden, aber sie stehen für erweiterte Szenarios zur Verfügung. Die behaviorValidator-Funktionen können bei leichter zugänglichen Verfahren hilfreich sein.
Verhaltensweisen werden im customDimensions-Feld in der CustomEvents-Tabelle angezeigt.
Rückruffunktionen
Drei verschiedene behaviorValidator
-Rückruffunktionen werden im Rahmen dieser Erweiterung angeboten. Sie können auch Ihre eigenen Rückruffunktionen verwenden, wenn die exponierten Funktionen Ihre Anforderungen nicht erfüllen. Die Absicht besteht darin, die Datenstruktur Ihres eigenen Verhaltens zu verwenden. Das Plug-In verwendet diese Validierungsfunktion beim Extrahieren der Verhaltensweisen aus den Daten-Tags.
Name | Beschreibung |
---|---|
BehaviorValueValidator | Verwenden Sie diese Rückruffunktion, wenn die Datenstruktur Ihres Verhaltens ein Array von Zeichenfolgen ist. |
BehaviorMapValidator | Verwenden Sie diese Rückruffunktion, wenn die Datenstruktur Ihres Verhaltens ein Wörterbuch ist. |
BehaviorEnumValidator | Verwenden Sie diese Rückruffunktion, wenn es sich bei der Verhaltensdatenstruktur um eine Enumeration handelt. |
Übergeben von Zeichenfolgen und numerischen Werten
Um die Anzahl der übergebenen Bytes zu reduzieren, übergeben Sie den Zahlenwert anstelle der Volltextzeichenfolge. Wenn die Kosten kein Problem sind, können Sie die Volltextzeichenfolge übergeben (z. B. NAVIGATIONBACK).
Beispielsyntax mit behaviorValidator
Hier sehen Sie ein Beispiel dafür, wie eine Validierungssteuerelement für eine Verhaltenszuordnung aussehen könnte. Ihr Steuerelement kann je nach Taxonomie Ihrer Organisation und den von Ihnen erfassten Ereignissen anders aussehen.
var clickPlugin = Microsoft.ApplicationInsights.ClickAnalyticsPlugin;
var clickPluginInstance = new clickPlugin();
// Behavior enum values
var behaviorMap = {
UNDEFINED: 0, // default, Undefined
///////////////////////////////////////////////////////////////////////////////////////////////////
// Page Experience [1-19]
///////////////////////////////////////////////////////////////////////////////////////////////////
NAVIGATIONBACK: 1, // Advancing to the previous index position within a webpage
NAVIGATION: 2, // Advancing to a specific index position within a webpage
NAVIGATIONFORWARD: 3, // Advancing to the next index position within a webpage
APPLY: 4, // Applying filter(s) or making selections
REMOVE: 5, // Applying filter(s) or removing selections
SORT: 6, // Sorting content
EXPAND: 7, // Expanding content or content container
REDUCE: 8, // Sorting content
CONTEXTMENU: 9, // Context menu
TAB: 10, // Tab control
COPY: 11, // Copy the contents of a page
EXPERIMENTATION: 12, // Used to identify a third-party experimentation event
PRINT: 13, // User printed page
SHOW: 14, // Displaying an overlay
HIDE: 15, // Hiding an overlay
MAXIMIZE: 16, // Maximizing an overlay
MINIMIZE: 17, // Minimizing an overlay
BACKBUTTON: 18, // Clicking the back button
///////////////////////////////////////////////////////////////////////////////////////////////////
// Scenario Process [20-39]
///////////////////////////////////////////////////////////////////////////////////////////////////
STARTPROCESS: 20, // Initiate a web process unique to adopter
PROCESSCHECKPOINT: 21, // Represents a checkpoint in a web process unique to adopter
COMPLETEPROCESS: 22, // Page Actions that complete a web process unique to adopter
SCENARIOCANCEL: 23, // Actions resulting from cancelling a process/scenario
///////////////////////////////////////////////////////////////////////////////////////////////////
// Download [40-59]
///////////////////////////////////////////////////////////////////////////////////////////////////
DOWNLOADCOMMIT: 40, // Initiating an unmeasurable off-network download
DOWNLOAD: 41, // Initiating a download
///////////////////////////////////////////////////////////////////////////////////////////////////
// Search [60-79]
///////////////////////////////////////////////////////////////////////////////////////////////////
SEARCHAUTOCOMPLETE: 60, // Auto-completing a search query during user input
SEARCH: 61, // Submitting a search query
SEARCHINITIATE: 62, // Initiating a search query
TEXTBOXINPUT: 63, // Typing or entering text in the text box
///////////////////////////////////////////////////////////////////////////////////////////////////
// Commerce [80-99]
///////////////////////////////////////////////////////////////////////////////////////////////////
VIEWCART: 82, // Viewing the cart
ADDWISHLIST: 83, // Adding a physical or digital good or services to a wishlist
FINDSTORE: 84, // Finding a physical store
CHECKOUT: 85, // Before you fill in credit card info
REMOVEFROMCART: 86, // Remove an item from the cart
PURCHASECOMPLETE: 87, // Used to track the pageView event that happens when the CongratsPage or Thank You page loads after a successful purchase
VIEWCHECKOUTPAGE: 88, // View the checkout page
VIEWCARTPAGE: 89, // View the cart page
VIEWPDP: 90, // View a PDP
UPDATEITEMQUANTITY: 91, // Update an item's quantity
INTENTTOBUY: 92, // User has the intent to buy an item
PUSHTOINSTALL: 93, // User has selected the push to install option
///////////////////////////////////////////////////////////////////////////////////////////////////
// Authentication [100-119]
///////////////////////////////////////////////////////////////////////////////////////////////////
SIGNIN: 100, // User sign-in
SIGNOUT: 101, // User sign-out
///////////////////////////////////////////////////////////////////////////////////////////////////
// Social [120-139]
///////////////////////////////////////////////////////////////////////////////////////////////////
SOCIALSHARE: 120, // "Sharing" content for a specific social channel
SOCIALLIKE: 121, // "Liking" content for a specific social channel
SOCIALREPLY: 122, // "Replying" content for a specific social channel
CALL: 123, // Click on a "call" link
EMAIL: 124, // Click on an "email" link
COMMUNITY: 125, // Click on a "community" link
///////////////////////////////////////////////////////////////////////////////////////////////////
// Feedback [140-159]
///////////////////////////////////////////////////////////////////////////////////////////////////
VOTE: 140, // Rating content or voting for content
SURVEYCHECKPOINT: 145, // Reaching the survey page/form
///////////////////////////////////////////////////////////////////////////////////////////////////
// Registration, Contact [160-179]
///////////////////////////////////////////////////////////////////////////////////////////////////
REGISTRATIONINITIATE: 161, // Initiating a registration process
REGISTRATIONCOMPLETE: 162, // Completing a registration process
CANCELSUBSCRIPTION: 163, // Canceling a subscription
RENEWSUBSCRIPTION: 164, // Renewing a subscription
CHANGESUBSCRIPTION: 165, // Changing a subscription
REGISTRATIONCHECKPOINT: 166, // Reaching the registration page/form
///////////////////////////////////////////////////////////////////////////////////////////////////
// Chat [180-199]
///////////////////////////////////////////////////////////////////////////////////////////////////
CHATINITIATE: 180, // Initiating a chat experience
CHATEND: 181, // Ending a chat experience
///////////////////////////////////////////////////////////////////////////////////////////////////
// Trial [200-209]
///////////////////////////////////////////////////////////////////////////////////////////////////
TRIALSIGNUP: 200, // Signing up for a trial
TRIALINITIATE: 201, // Initiating a trial
///////////////////////////////////////////////////////////////////////////////////////////////////
// Signup [210-219]
///////////////////////////////////////////////////////////////////////////////////////////////////
SIGNUP: 210, // Signing up for a notification or service
FREESIGNUP: 211, // Signing up for a free service
///////////////////////////////////////////////////////////////////////////////////////////////////
// Referrals [220-229]
///////////////////////////////////////////////////////////////////////////////////////////////////
PARTNERREFERRAL: 220, // Navigating to a partner's web property
///////////////////////////////////////////////////////////////////////////////////////////////////
// Intents [230-239]
///////////////////////////////////////////////////////////////////////////////////////////////////
LEARNLOWFUNNEL: 230, // Engaging in learning behavior on a commerce page (for example, "Learn more click")
LEARNHIGHFUNNEL: 231, // Engaging in learning behavior on a non-commerce page (for example, "Learn more click")
SHOPPINGINTENT: 232, // Shopping behavior prior to landing on a commerce page
///////////////////////////////////////////////////////////////////////////////////////////////////
// Video [240-259]
///////////////////////////////////////////////////////////////////////////////////////////////////
VIDEOSTART: 240, // Initiating a video
VIDEOPAUSE: 241, // Pausing a video
VIDEOCONTINUE: 242, // Pausing or resuming a video
VIDEOCHECKPOINT: 243, // Capturing predetermined video percentage complete
VIDEOJUMP: 244, // Jumping to a new video location
VIDEOCOMPLETE: 245, // Completing a video (or % proxy)
VIDEOBUFFERING: 246, // Capturing a video buffer event
VIDEOERROR: 247, // Capturing a video error
VIDEOMUTE: 248, // Muting a video
VIDEOUNMUTE: 249, // Unmuting a video
VIDEOFULLSCREEN: 250, // Making a video full screen
VIDEOUNFULLSCREEN: 251, // Making a video return from full screen to original size
VIDEOREPLAY: 252, // Making a video replay
VIDEOPLAYERLOAD: 253, // Loading the video player
VIDEOPLAYERCLICK: 254, // Click on a button within the interactive player
VIDEOVOLUMECONTROL: 255, // Click on video volume control
VIDEOAUDIOTRACKCONTROL: 256, // Click on audio control within a video
VIDEOCLOSEDCAPTIONCONTROL: 257, // Click on the closed-caption control
VIDEOCLOSEDCAPTIONSTYLE: 258, // Click to change closed-caption style
VIDEORESOLUTIONCONTROL: 259, // Click to change resolution
///////////////////////////////////////////////////////////////////////////////////////////////////
// Advertisement Engagement [280-299]
///////////////////////////////////////////////////////////////////////////////////////////////////
ADBUFFERING: 283, // Ad is buffering
ADERROR: 284, // Ad error
ADSTART: 285, // Ad start
ADCOMPLETE: 286, // Ad complete
ADSKIP: 287, // Ad skipped
ADTIMEOUT: 288, // Ad timed out
OTHER: 300 // Other
};
// Application Insights Configuration
var configObj = {
connectionString: "YOUR_CONNECTION_STRING",
// Alternatively, you can pass in the instrumentation key,
// but support for instrumentation key ingestion will end on March 31, 2025.
// instrumentationKey: "YOUR INSTRUMENTATION KEY",
extensions: [clickPluginInstance],
extensionConfig: {
[clickPluginInstance.identifier]: {
behaviorValidator: Microsoft.ApplicationInsights.BehaviorMapValidator(behaviorMap),
defaultRightClickBhvr: 9
},
},
};
var appInsights = new Microsoft.ApplicationInsights.ApplicationInsights({
config: configObj
});
appInsights.loadAppInsights();
Beispiel-App
Informationen zum Implementieren von benutzerdefinierten Ereigniseigenschaften wie Name
und parentid
und benutzerdefiniertem Verhalten und Inhalt finden Sie unter Einfache Web-App mit aktiviertem Click Analytics AutoCollection-Plug-In. Informationen dazu, wo Sie Klickdaten finden, finden Sie in der Infodatei der Beispiel-App.
Beispiele für parentId
-Schlüssel
Die folgenden Beispiele veranschaulichen, welcher Wert als parentId
für verschiedene Konfigurationen abgerufen wird.
Die Beispiele zeigen, wie das Plug-In die id
des nächstgelegenen übergeordneten Elements verwendet, wenn parentDataTag
definiert ist, aber das Plug-In dieses Tag nicht unter der DOM-Struktur findet.
Beispiel 1
In Beispiel 1 ist das parentDataTag
nicht deklariert, und data-parentid
oder data-*-parentid
ist in keinem Element definiert. Dieses Beispiel zeigt eine Konfiguration, bei der ein Wert für parentId
nicht erfasst wird.
export const clickPluginConfigWithUseDefaultContentNameOrId = {
dataTags : {
customDataPrefix: "",
parentDataTag: "",
dntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: true,
autoCapture: true
},
};
<div className="test1" data-id="test1parent">
<div>Test1</div>
<div>with id, data-id, parent data-id defined</div>
<Button id="id1" data-id="test1id" variant="info" onClick={trackEvent}>Test1</Button>
</div>
Für das angeklickte Element <Button>
ist parentId
auf den Wert “not_specified”
festgelegt, da keine parentDataTag
-Details definiert sind und im aktuellen Element keine übergeordnete Element-ID angegeben wird.
Beispiel 2
In Beispiel 2 ist parentDataTag
deklariert, und data-parentid
ist definiert. In diesem Beispiel wird gezeigt, wie Details der übergeordneten ID erfasst werden.
export const clickPluginConfigWithParentDataTag = {
dataTags : {
customDataPrefix: "",
parentDataTag: "group",
ntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: false,
autoCapture: true
},
};
<div className="test2" data-group="buttongroup1" data-id="test2parent">
<div>Test2</div>
<div>with data-id, parentid, parent data-id defined</div>
<Button data-id="test2id" data-parentid = "parentid2" variant="info" onClick={trackEvent}>Test2</Button>
</div>
Für das angeklickte Element <Button>
weist parentId
den Wert parentid2
auf. Obwohl parentDataTag
deklariert ist, wird die data-parentid
direkt innerhalb des Elements definiert. Daher hat dieser Wert Vorrang vor allen anderen übergeordneten IDs oder ID-Details, die in den übergeordneten Elementen definiert sind.
Beispiel 3
In Beispiel 3 ist parentDataTag
deklariert, und das Attribut data-parentid
oder data-*-parentid
ist nicht definiert. In diesem Beispiel wird gezeigt, wie das Deklarieren von parentDataTag
hilfreich sein kann, um einen Wert für parentId
in solchen Fällen zu sammeln, in denen dynamische Elemente keine id
oder data-*-id
aufweisen.
export const clickPluginConfigWithParentDataTag = {
dataTags : {
customDataPrefix: "",
parentDataTag: "group",
dntDataTag: "ai-dnt",
captureAllMetaDataContent:false,
useDefaultContentNameOrId: false,
autoCapture: true
},
};
<div className="test6" data-group="buttongroup1" data-id="test6grandparent">
<div>Test6</div>
<div>with data-id, grandparent data-group defined, parent data-id defined</div>
<div data-id="test6parent">
<Button data-id="test6id" variant="info" onClick={trackEvent}>Test6</Button>
</div>
</div>
Für das angeklickte Element <Button>
weist parentId
den Wert test6parent
auf, weil parentDataTag
deklariert ist. Diese Deklaration ermöglicht es dem Plug-In, die aktuelle Elementstruktur zu durchlaufen. Daher wird die ID des nächstgelegenen übergeordneten Elements verwendet, wenn Details der übergeordneten ID nicht direkt im aktuellen Element bereitgestellt werden. Wenn data-group="buttongroup1"
definiert ist, kann das Plug-In die parentId
effizienter ermitteln.
Wenn Sie das data-group="buttongroup1"
-Attribut entfernen, ist der Wert von parentId
immer noch test6parent
, da parentDataTag
immer noch deklariert ist.
Problembehandlung
Informationen finden Sie in dem dedizierten Artikel zur Problembehandlung.
Nächste Schritte
- Bestätigen Sie, dass Daten fließen.
- Siehe Analysieren der Produktnutzung mit HEART für erweiterte Produktanalysen.
- Siehe das GitHub-Repository und das npm-Paket für das Click Analytics Autocollection Plug-in.
- Verwenden Sie die Ereignisanalyse in der Nutzungserfahrung, um die wichtigsten Klicks zu analysieren und nach verfügbaren Dimensionen zu unterteilen.
- Wenn Sie mit dem Schreiben einer Abfrage nicht vertraut sind, finden Sie Informationen dazu unter Protokollanalyse.
- Erstellen Sie eine Arbeitsmappe, oder exportieren Sie Daten in Power BI, um benutzerdefinierte Visualisierungen von Klickdaten zu erstellen.