使用最新的Javascript代码段时,如何调用addTelemetryInitializer? [英] How can I call addTelemetryInitializer when using the latest Javascript snippet?

查看:43
本文介绍了使用最新的Javascript代码段时,如何调用addTelemetryInitializer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为网页浏览事件自定义name属性

I am trying to customise the name attribute for pageview events

以前曾有人问过这个问题,例如

This has previously been asked, for example How to provide custom names for page view events in Azure App Insights?

但是我发现的此解决方案和所有其他解决方案(以及Microsoft文档)也都在使用旧版本的javascript代码段,形式为

but this and all other solutions I've found (and the Microsoft documentation too) are working with an old version of the javascript snippet, of the form

…
window.appInsights = appInsights;
…
appInsights.trackPageView();

不过,门户网站上的当前代码段还是非常不同的

The current snippet from the portal is very different though

var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var ...
{
     instrumentationKey:"key"
}); window[aiName] = aisdk,aisdk.queue && aisdk.queue.length ===0 && aisdk.trackPageView({});

我已经尝试过这种事情

var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var aiName=window[sdkInstance],aisdk=window[aiName]||function(e){function n(e){t[e]=function(){var n=arguments;t.queue.push(function(){t[e].apply(t,n)})}}var t={config:e};t.initialize=!0;var i=document,a=window;setTimeout(function(){var n=i.createElement("script");n.src=e.url||"https://az416426.vo.msecnd.net/scripts/b/ai.2.min.js",i.getElementsByTagName("script")[0].parentNode.appendChild(n)});try{t.cookie=i.cookie}catch(e){}t.queue=[],t.version=2;for(var r=["Event","PageView","Exception","Trace","DependencyData","Metric","PageViewPerformance"];r.length;)n("track"+r.pop());n("startTrackPage"),n("stopTrackPage");var s="Track"+r[0];if(n("start"+s),n("stop"+s),n("setAuthenticatedUserContext"),n("clearAuthenticatedUserContext"),n("flush"),!(!0===e.disableExceptionTracking||e.extensionConfig&&e.extensionConfig.ApplicationInsightsAnalytics&&!0===e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)){n("_"+(r="onerror"));var o=a[r];a[r]=function(e,n,i,a,s){var c=o&&o(e,n,i,a,s);return!0!==c&&t["_"+r]({message:e,url:n,lineNumber:i,columnNumber:a,error:s}),c},e.autoExceptionInstrumented=!0}return t}(
{
  instrumentationKey:"my-key"
}); window[aiName] = aisdk;
if (aisdk.queue && 0 !== aisdk.queue.length) {
  function adjustPageName(item) {
        var name = item.name.replace("AppName", "");

        if (name.indexOf("Order") !== -1)
            return "Order";

        if (name.indexOf("Product") !== -1)
            return "Shop";

        // And so on...
        return name;
    }

    // Add telemetry initializer
    aisdk.queue.push(function () {
        aisdk.context.addTelemetryInitializer(function (envelope) {
            var telemetryItem = envelope.data.baseData;
            // To check the telemetry item’s type:
            if (envelope.name === Microsoft.ApplicationInsights.Telemetry.PageView.envelopeType || envelope.name === Microsoft.ApplicationInsights.Telemetry.PageViewPerformance.envelopeType) {

                // Do not track admin pages
                if (telemetryItem.name.indexOf("Admin") !== -1)
                    return false;

                telemetryItem.name = adjustPageName(telemetryItem);
            }

        });
    });
  aisdk.trackPageView();
};

但是它不起作用(没有错误,但也不会影响遥测)

but it doesn't work (no errors, but no affect on the telemetry either)

有人使用新代码片段成功完成了类似的工作吗?

Has anyone managed to get anything like this working using the new snippet?

推荐答案

请尝试以下代码,我可以使用最新的javascript代码段添加自定义属性:

Please try the code below, I can add a custom property by using the latest javascript code snippet:

<script type="text/javascript">
     var sdkInstance="appInsightsSDK";window[sdkInstance]="appInsights";var aiName=window[sdkInstance],aisdk=window[aiName]||function(e){function n(e) { t[e] = function () { var n = arguments; t.queue.push(function () { t[e].apply(t, n) }) } }var t={config: e};t.initialize=!0;var i=document,a=window;setTimeout(function(){var n=i.createElement("script");n.src=e.url||"https://az416426.vo.msecnd.net/scripts/b/ai.2.min.js",i.getElementsByTagName("script")[0].parentNode.appendChild(n)});try{t.cookie = i.cookie}catch(e){}t.queue=[],t.version=2;for(var r=["Event","PageView","Exception","Trace","DependencyData","Metric","PageViewPerformance"];r.length;)n("track"+r.pop());n("startTrackPage"),n("stopTrackPage");var s="Track"+r[0];if(n("start"+s),n("stop"+s),n("setAuthenticatedUserContext"),n("clearAuthenticatedUserContext"),n("flush"),!(!0===e.disableExceptionTracking||e.extensionConfig&&e.extensionConfig.ApplicationInsightsAnalytics&&!0===e.extensionConfig.ApplicationInsightsAnalytics.disableExceptionTracking)){n("_" + (r = "onerror")); var o=a[r];a[r]=function(e,n,i,a,s){var c=o&&o(e,n,i,a,s);return!0!==c&&t["_"+r]({message: e,url:n,lineNumber:i,columnNumber:a,error:s}),c},e.autoExceptionInstrumented=!0}return t}(
          {
             instrumentationKey: "xxxxxxxxxx"
          }
    ); window[aiName] = aisdk, aisdk.queue && 0 === aisdk.queue.length;
    // Add telemetry initializer
    aisdk.queue.push(function () {
        var telemetryInitializer = (envelope) => {
            //Add a custom property
            envelope.data.name = 'This item passed through my telemetry initializer';
        };
        appInsights.addTelemetryInitializer(telemetryInitializer);
    });
    aisdk.trackPageView({})

</script>

然后在azure门户中添加自定义属性:

Then in azure portal, the custom property is added:

这篇关于使用最新的Javascript代码段时,如何调用addTelemetryInitializer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆