Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzenia funkcji zestawu JAVAScript SDK usługi Application Insights to dodatkowe funkcje, które można dodać do zestawu SDK języka JavaScript usługi Application Insights, aby zwiększyć jego funkcjonalność.
W tym artykule omówiliśmy wtyczkę Click Analytics, która automatycznie śledzi kliknięcia na stronach internetowych, używając atrybutów data-*
lub dostosowanych tagów w elementach HTML do zbierania danych telemetrycznych o zdarzeniach.
Wymagania wstępne
Zainstaluj zestaw SDK języka JavaScript przed włączeniem wtyczki Click Analytics.
Jakie dane zbiera wtyczka?
Następujące właściwości klucza są domyślnie przechwytywane po włączeniu wtyczki.
Właściwości zdarzenia niestandardowego
Nazwa/nazwisko | opis | Przykład |
---|---|---|
Nazwa/nazwisko | Nazwa zdarzenia niestandardowego. Aby uzyskać więcej informacji na temat sposobu wypełniania nazwy, zobacz Nazwa kolumny. | Informacje |
typElementu | Typ zdarzenia. | customEvent |
sdkVersion | Wersja zestawu SDK usługi Application Insights wraz z wtyczką obsługującą kliknięcia. | JavaScript:2_ClickPlugin2 |
Wymiary niestandardowe
Nazwa/nazwisko | opis | Przykład |
---|---|---|
typ akcji | Typ akcji, który spowodował zdarzenie kliknięcia. Może to być kliknięcie w lewo lub prawym przyciskiem myszy. | CL |
baseTypeSource | Źródło typu bazowego zdarzenia niestandardowego. | Wydarzenie kliknięcia |
kliknijKoordynaty | Współrzędne, w których jest wyzwalane zdarzenie kliknięcia. | 659X47 |
zawartość | Symbol zastępczy do przechowywania dodatkowych data-* atrybutów i wartości. |
[{sample1:value1, sample2:value2}] |
nazwaStrony | Tytuł strony, na której jest wyzwalane zdarzenie kliknięcia. | Tytuł przykładu |
parentId (identyfikator rodzica) | Identyfikator lub nazwa elementu nadrzędnego. Aby uzyskać więcej informacji na temat wypełniania klucza parentId, zobacz klucz parentId. | navbarContainer |
Pomiary niestandardowe
Nazwa/nazwisko | opis | Przykład |
---|---|---|
czasNaDziałanie | Czas potrzebny użytkownikowi na kliknięcie elementu w milisekundach od momentu załadowania początkowej strony. | 87407 |
Dodawanie wtyczki Click Analytics
Użytkownicy mogą skonfigurować wtyczkę do automatycznego zbierania kliknięć za pomocą skryptu ładowania SDK języka JavaScript (Web) lub modułu npm, a następnie opcjonalnie dodać rozszerzenie frameworka.
Uwaga
31 marca 2025 r. zakończy się wsparcie dla pobierania klucza instrumentacji. Wprowadzanie klucza instrumentacji będzie nadal działać, ale nie będziemy już udostępniać aktualizacji ani wsparcia dla tej funkcji. Przejście do parametrów połączenia w celu skorzystania z nowych możliwości.
Dodawanie kodu
Wklej skrypt modułu ładującego zestawu JAVAScript (Web) SDK w górnej części każdej strony, dla której chcesz włączyć usługę Application Insights.
<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>
Aby dodać lub zaktualizować konfigurację skryptu modułu ładującego zestawu SDK języka JavaScript (Web), zobacz Konfiguracja skryptu modułu ładującego zestawu JAVAScript (Web).
Napiwek
Jeśli chcesz dodać rozszerzenie struktury lub już to zrobiłeś, zobacz przykłady kodu React, React Native i Angular, aby dowiedzieć się, jak dodać wtyczkę Click Analytics.
(Opcjonalnie) Ustawianie kontekstu uwierzytelnioowanego użytkownika
Jeśli chcesz ustawić to ustawienie opcjonalne, zobacz Ustawianie kontekstu uwierzytelnionych użytkowników.
Jeśli używasz skoroszytu HEART z wtyczką Click Analytics, nie musisz ustawiać kontekstu uwierzytelnionego użytkownika, aby wyświetlić dane telemetryczne. Aby uzyskać więcej informacji, zobacz dokumentację skoroszytu HEART.
Korzystanie z wtyczki
W poniższych sekcjach opisano sposób używania wtyczki.
Magazyn danych telemetrycznych
Dane telemetryczne generowane na podstawie zdarzeń kliknięcia są przechowywane w customEvents
sekcji Dzienniki usługi Application Insights > w witrynie Azure Portal>.
name
Kolumna name
obiektu customEvent
jest wypełniana na podstawie następujących reguł:
- Jeśli
customDataPrefix
nie zostanie zadeklarowany w konfiguracji zaawansowanej,id
podany wdata-id
jest używany jako nazwacustomEvent
. - Jeśli
customDataPrefix
jest zadeklarowany,id
podany wdata-*-id
, który oznacza, że musi zaczynać się oddata
i kończyć ciągiemid
, jest używany jako nazwacustomEvent
. Jeśli na przykład kliknięty element HTML ma atrybut"data-sample-id"="button1"
, to"button1"
jest nazwącustomEvent
. - Jeśli atrybut
data-id
lubdata-*-id
nie istnieje i jeśliuseDefaultContentNameOrId
jest ustawiony natrue
, atrybut HTMLid
lub nazwa zawartości elementu klikniętego jest używana jako nazwacustomEvent
. Jeśli zarównoid
jak i nazwa zawartości są obecne, pierwszeństwo maid
. - Jeśli
useDefaultContentNameOrId
jestfalse
, nazwacustomEvent
to"not_specified"
. Zalecamy ustawienieuseDefaultContentNameOrId
natrue
w celu generowania znaczących danych.
contentName
Jeśli masz zdefiniowaną funkcję wywołania zwrotnego w konfiguracji zaawansowanej, kolumna contentName
obiektu zostanie wypełniona na podstawie następujących reguł:
W przypadku klikniętego elementu HTML
<a>
wtyczka próbuje zebrać wartość atrybutu innerText (text). Jeśli wtyczka nie może odnaleźć tego atrybutu, próbuje zebrać wartość jego atrybutu innerHtml.W przypadku klikniętego elementu HTML
<img>
lub<area>
wtyczka zbiera wartość jego atrybutualt
.Dla wszystkich innych klikniętych elementów HTML,
contentName
jest wypełniany na podstawie następujących reguł, które są wymienione w kolejności pierwszeństwa:- Wartość atrybutu
value
elementu - Wartość atrybutu
name
elementu - Wartość atrybutu
alt
elementu - Wartość atrybutu innerText elementu
- Wartość atrybutu
id
elementu
- Wartość atrybutu
parentId
klucz
Aby wypełnić klucz parentId
w tabeli customDimensions
w ramach customEvent
w dziennikach, zadeklaruj tag parentDataTag
lub zdefiniuj atrybut data-parentid
.
Wartość parametru parentId
jest pobierana na podstawie następujących reguł:
- Po zadeklarowaniu
parentDataTag
, wtyczka pobiera wartośćid
lubdata-*-id
zdefiniowaną w elemencie, który znajduje się najbliżej klikniętego elementu jakoparentId
. - Jeśli obie
data-*-id
wartości iid
są zdefiniowane, pierwszeństwo ma wartośćdata-*-id
. - Jeśli
parentDataTag
jest zdefiniowany, ale wtyczka nie może odnaleźć tego tagu w drzewie DOM, wtyczka używaid
lubdata-*-id
zdefiniowanego w elemencie znajdującym się najbliżej elementu, który został kliknięty, jakoparentId
. Zalecamy jednak zdefiniowanie atrybutudata-{parentDataTag}
lubcustomDataPrefix-{parentDataTag}
w celu zmniejszenia liczby pętli potrzebnych do znalezieniaparentId
elementu. DeklarowanieparentDataTag
jest przydatne, gdy musisz użyć wtyczki z dostosowanymi opcjami. - Jeśli żadna wartość
parentDataTag
nie jest zdefiniowana i żadne informacjeparentId
nie są uwzględnione w bieżącym elemencie, żadna wartośćparentId
nie jest zbierana. - Jeśli
parentDataTag
jest zdefiniowane,useDefaultContentNameOrId
zostaje ustawione nafalse
, a tylko atrybutid
jest zdefiniowany w elemencie znajdującym się najbliżej klikniętego elementu,parentId
zostaje wypełnione jako"not_specified"
. Aby pobrać wartośćid
, ustawuseDefaultContentNameOrId
na wartośćtrue
.
Podczas definiowania atrybutu data-parentid
lub data-*-parentid
wtyczka pobiera wystąpienie tego atrybutu znajdującego się najbliżej klikniętego elementu, w tym w ramach klikniętego elementu, jeśli ma to zastosowanie.
W przypadku deklarowania parentDataTag
i definiowania atrybutu data-parentid
or data-*-parentid
pierwszeństwo ma wartość data-parentid
lub data-*-parentid
.
Jeśli zostanie wyświetlone ostrzeżenie telemetryczne "Kliknij wiersze zdarzeń bez wartości parentId", zobacz Naprawianie ostrzeżenia "Klikanie wierszy zdarzeń bez wartości parentId".
Aby uzyskać przykłady pokazujące, która wartość jest pobierana jako parentId
dla różnych konfiguracji, zobacz Przykłady klucza parentid
.
Uwaga
- Po dołączeniu
parentDataTag
do dowolnego elementu HTML w aplikacji, SDK zaczyna szukać tagów elementów nadrzędnych w całej aplikacji, a nie tylko w tym elemencie HTML, w którym został użyty. - Jeśli używasz skoroszytu HEART z wtyczką Click Analytics, aby zdarzenia HEART zostały zarejestrowane lub wykryte, tag
parentDataTag
musi zostać zadeklarowany we wszystkich innych częściach aplikacji użytkownika końcowego.
customDataPrefix
OpcjacustomDataPrefix
w konfiguracji zaawansowanej zapewnia użytkownikowi możliwość skonfigurowania prefiksu atrybutu danych w celu ułatwienia identyfikacji lokalizacji serca w bazie kodu danej osoby. Prefiks musi być zawsze małymi literami i zaczynać się od data-
. Na przykład:
data-heart-
data-team-name-
data-example-
W kodzie HTML atrybuty globalne są nazywane atrybutami danych niestandardowych, data-*
które umożliwiają wymianę zastrzeżonych informacji między kodem HTML i jego reprezentacją DOM przez skrypty. Starsze przeglądarki, takie jak Internet Explorer i Safari, upuszczają atrybuty, których nie rozumieją, chyba że zaczynają się od data-
.
Można zastąpić gwiazdkę (*
) w data-*
dowolną nazwą zgodnie z regułą produkcyjną nazw XML z następującymi ograniczeniami.
- Nazwa nie może zaczynać się od "xml", niezależnie od wielkości liter.
- Nazwa nie może zawierać średnika (U+003A).
- Nazwa nie może zawierać wielkiej litery.
Dodawanie konfiguracji zaawansowanej
Nazwa/nazwisko | Typ | Domyślny | opis |
---|---|---|---|
automatycznePrzechwytywanie | Typ logiczny | Prawda | Konfiguracja automatycznego przechwytywania. |
funkcja zwrotna | IValueCallback | Null (zero) | Konfiguracja wywołań zwrotnych. |
tagi strony | Objekt | Null (zero) | Tagi strony. |
Tagi danych | ICustomDataTags | Null (zero) | Niestandardowe tagi danych udostępniane do zastępowania tagów domyślnych używanych do przechwytywania danych kliknięcia. |
urlCollectHash | Typ logiczny | Fałsz | Włącza rejestrowanie wartości po znaku "#" adresu URL. |
zapytanieZbieraniaURL | Typ logiczny | Fałsz | Włącza rejestrowanie ciągu zapytania adresu URL. |
walidator zachowania | Funkcja | Null (zero) | Funkcja wywołania zwrotnego do sprawdzania poprawności wartości data-*-bhvr . Aby uzyskać więcej informacji, zobacz sekcję behaviorValidator. |
defaultRightClickBhvr | Liczba ciągów (lub) | '' | Domyślna wartość zachowania po wystąpieniu zdarzenia kliknięcia prawym przyciskiem myszy. Ta wartość jest zastępowana, jeśli element ma data-*-bhvr atrybut . |
odrzućNiepoprawneZdarzenia | Typ logiczny | Fałsz | Flaga służąca do usunięcia zdarzeń, które nie mają przydatnych danych dotyczących kliknięć. |
IValueCallback
Nazwa/nazwisko | Typ | Domyślny | opis |
---|---|---|---|
nazwaStrony | Funkcja | Null (zero) | Funkcja zastępująca domyślne pageName zachowanie przechwytywania. |
TagiDziałańNaStronie | Funkcja | Null (zero) | Funkcja wywołania zwrotnego umożliwiająca rozszerzenie wartości domyślnej pageTags zebranej pageAction podczas zdarzenia. |
nazwaTreści | Funkcja | Null (zero) | Funkcja wywołania zwrotnego do wypełnienia dostosowanego contentName elementu . |
ICustomDataTags
Nazwa/nazwisko | Typ | Domyślny | Domyślny tag do użycia w kodzie HTML | opis |
---|---|---|---|---|
UżyjDomyślnejNazwyLubIdentyfikatoraZawartości | Typ logiczny | Fałsz | Nie dotyczy | Jeśli true , zbiera standardowy atrybut id HTML dla contentName , gdy określony element nie jest oznaczony domyślnym prefiksem danych lub customDataPrefix . W przeciwnym razie standardowy atrybut HTML id dla contentName nie jest zbierany. |
customDataPrefix | Sznurek | data- |
data-* |
Automatyczne przechwytywanie nazwy i wartości zawartości elementów oznaczonych podanym prefiksem. Można na przykład data-*-id data-<yourcustomattribute> użyć elementu w tagach HTML. |
aiBlobAttributeTag | Sznurek | ai-blob |
data-ai-blob |
Wtyczka obsługuje atrybut typu JSON blob zamiast poszczególnych atrybutów data-* . |
metaDataPrefix | Sznurek | Null (zero) | Nie dotyczy | Automatyczne przechwytywanie nazwy i zawartości meta elementu nagłówka HTML z podanym prefiksem podczas przechwytywania. Można na przykład custom- użyć w tagu meta HTML. |
ZarejestrujCałąZawartośćMetadanych | Typ logiczny | Fałsz | Nie dotyczy | Automatyczne przechwytywanie wszystkich nazw elementów meta i zawartości nagłówka HTML. Wartość domyślna to „false”. Jeśli jest włączone, zastępuje to dostarczone metaDataPrefix . |
parentDataTag | Sznurek | Null (zero) | Nie dotyczy | Pobiera element parentId w dziennikach, gdy data-parentid lub data-*-parentid nie zostanie napotkany. W celu zwiększenia wydajności, przestaje przeszukiwać drzewo DOM, aby przechwycić nazwę i wartość elementów, kiedy napotka atrybut data-{parentDataTag} lub customDataPrefix-{parentDataTag} . Aby uzyskać więcej informacji, zobacz parentId key. |
dntDataTag | Sznurek | ai-dnt |
data-ai-dnt |
Wtyczka do przechwytywania danych telemetrycznych ignoruje elementy HTML z tym atrybutem. |
walidator zachowania
Funkcje behaviorValidator
automatycznie sprawdzają, czy oznakowane zachowania w kodzie są zgodne ze wstępnie zdefiniowaną listą. Funkcje zapewniają spójność oznakowanych zachowań z ustanowioną taksonomią przedsiębiorstwa. Nie jest wymagane ani oczekiwane, że większość klientów usługi Azure Monitor korzysta z tych funkcji, ale są dostępne dla zaawansowanych scenariuszy. Funkcje behaviorValidator mogą pomóc w bardziej dostępnych praktykach.
Zachowania są wyświetlane w polu customDimensions w tabeli CustomEvents.
Funkcje wywołania zwrotnego
Trzy różne behaviorValidator
funkcje wywołania zwrotnego są udostępnione w ramach tego rozszerzenia. Możesz również użyć własnych funkcji wywołania zwrotnego, jeśli uwidocznione funkcje nie rozwiążą wymagań. Celem jest wprowadzenie struktury danych własnego zachowania. Wtyczka używa tej funkcji modułu sprawdzania poprawności podczas wyodrębniania zachowań z tagów danych.
Nazwa/nazwisko | opis |
---|---|
BehaviorValueValidator | Użyj tej funkcji wywołania zwrotnego, jeśli struktura danych twojego zachowania jest tablicą ciągów. |
WalidatorMapyZachowań | Użyj tej funkcji wywołania zwrotnego, jeśli struktura danych twojego zachowania jest słownikiem. |
BehaviorEnumValidator | Użyj funkcji zwrotnej, jeśli struktura danych twojego zachowania jest typem Enum. |
Przekazywanie wartości tekstowych a liczbowych
Aby zmniejszyć liczbę przekazywanych bajtów, przekaż wartość liczbową zamiast pełnego ciągu tekstowego. Jeśli koszt nie jest problemem, możesz przekazać pełny ciąg tekstowy (na przykład NAVIGATIONBACK).
Przykładowe użycie z behaviorValidator
Oto przykład tego, jak może wyglądać moduł sprawdzania poprawności mapy zachowania. Twój może wyglądać inaczej, w zależności od taksonomii organizacji i zbieranych zdarzeń.
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();
Przykładowa aplikacja
Zobacz prostą aplikację internetową z włączoną wtyczką Autocollection Click Analytics, aby dowiedzieć się, jak zaimplementować niestandardowe właściwości zdarzeń, takie jak Name
i parentid
i niestandardowe zachowanie i zawartość. Zobacz plik readme przykładowej aplikacji, aby uzyskać informacje o tym, gdzie można znaleźć dane kliknięć.
parentId
Przykłady klucza
W poniższych przykładach pokazano, która wartość jest pobierana jako parentId
dla różnych konfiguracji.
Przykłady pokazują, że jeśli parentDataTag
jest zdefiniowane, ale wtyczka nie może znaleźć tego tagu w drzewie DOM, wtyczka używa id
z najbliższego elementu nadrzędnego.
Przykład 1
Na przykład 1 element parentDataTag
nie jest zadeklarowany i data-parentid
lub data-*-parentid
nie jest zdefiniowany w żadnym elemencie. W tym przykładzie pokazano konfigurację, w której wartość parentId
nie jest zbierana.
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>
W przypadku klikniętego elementu <Button>
wartość parentId
to not_specified
, ponieważ nie zdefiniowano żadnych parentDataTag
szczegółów i nie podano identyfikatora elementu nadrzędnego w bieżącym elemencie.
Przykład 2
W przykładzie 2 parentDataTag
jest zadeklarowana i data-parentid
zdefiniowana. W tym przykładzie pokazano, jak zbierane są szczegóły dotyczące identyfikatora nadrzędnego.
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>
W przypadku klikniętego elementu <Button>
, wartość parentId
to parentid2
. Mimo że parentDataTag
jest zadeklarowany, element data-parentid
jest zdefiniowany bezpośrednio w elemecie . W związku z tym ta wartość ma pierwszeństwo przed wszystkimi innymi identyfikatorami nadrzędnymi lub szczegółami identyfikatorów zdefiniowanymi w elementach nadrzędnych.
Przykład 3
W przykładzie 3 parentDataTag
jest zadeklarowany, a atrybut data-parentid
lub data-*-parentid
nie jest zdefiniowany. W tym przykładzie pokazano, jak deklarowanie parentDataTag
może być przydatne do zbierania wartości dla parentId
w przypadkach, gdy elementy dynamiczne nie mają id
ani data-*-id
.
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>
W przypadku klikniętego elementu <Button>
wartość parentId
to test6parent
, ponieważ parentDataTag
jest zadeklarowana. Ta deklaracja umożliwia wtyczkom przechodzenie przez bieżące drzewo elementów i dlatego identyfikator najbliższego elementu nadrzędnego będzie używany, gdy szczegóły identyfikatora nadrzędnego nie są bezpośrednio podane w bieżącym elemencie. Ze zdefiniowanym data-group="buttongroup1"
wtyczka znajduje parentId
wydajniej.
Jeśli usuniesz data-group="buttongroup1"
atrybut, wartość parentId
jest nadal test6parent
, ponieważ parentDataTag
jest nadal zadeklarowana.
Rozwiązywanie problemów
Zobacz dedykowany artykuł dotyczący rozwiązywania problemów.
Następne kroki
- Potwierdź, że dane przepływają.
- Zapoznaj się z dokumentacją dotyczącą korzystania ze skoroszytu HEART na potrzeby rozszerzonej analizy produktów.
- Zobacz repozytorium GitHub i pakiet npm dotyczące wtyczki Click Analytics Autocollection.
- Analityka zdarzeń w użytkowaniu umożliwia analizowanie najczęściej klikanych elementów i podział według dostępnych wymiarów.
- Jeśli nie znasz procesu pisania zapytania, zapoznaj się z usługą Log Analytics .
- Utwórz skoroszyt lub wyeksportuj do usługi Power BI, aby utworzyć niestandardowe wizualizacje danych dotyczących kliknięć.