javascript - 在 Application Insights 中使用 startTrackPage

标签 javascript jquery azure azure-application-insights

我最近一直在摆弄 Application Insights,并且在让 JavaScript API 正常工作时遇到了问题。在您应该添加到页面的默认脚本中,它们使用函数 trackPageView()。这似乎有效,但我还想收集有关用户在页面上停留多长时间的信息。我找到了 startTrackPage() 和 stopTrackPage() 函数,并尝试使用它们来获取信息,但我总是收到来自 startTrackPage() 的错误。

未捕获的类型错误:appInsights.startTrackPage不是函数(匿名函数)

我已经单步执行了代码,但在我调用它时该函数似乎尚未创建。 trackPageView() 已经定义了。我也尝试在文档加载后调用该函数,但仍然失败。但是,页面加载后我可以从开发人员控制台调用它。

Here是我最初找到有关 startTrackPage() 和 stopTrackPage() 的信息的地方。除此之外,我只是仔细阅读了一下,看看是否有其他人遇到过这个问题。

非常感谢您的帮助。

App Insight 的默认代码:

window.appInsights = appInsights;
appInsights.startPageView();

我尝试过的:

window.appInsights = appInsights;
appInsights.startTrackPage();

window.onunload = function () {
  appInsights.stopTrackPage();
};

最佳答案

简短回答:遗憾的是,目前无法按照您想要的方式可靠地使用 appInsights.startTrackPage()。

长答案:原因是startTrackPage()方法只在从CDN下载的JS中定义,所以在下载之前它是没有定义的。 你可以这样做:

appInsights.queue.push(function(){appInsights.startTrackPage();})

但是,这不会产生正确的测量,因为跟踪不会立即开始。 因此,您最好的方法是手动记录开始时间,但即使这样您也无法可靠地做到这一点。首先,您绝对不想使用 onunload 事件,因为此时 Application Insights SDK 发送数据为时已晚,因此很可能会丢失。使用onbeforeunload和flush()将有助于解决这个问题:

var pageStart =  +new Date;
window.addEventListener("beforeunload", function () {
  appInsights.trackMetric("timeOnPage", (+new Date)-pageStart);
  appInsights.flush();
});

但是,即使使用 onbeforeunload,您也会发现大量潜在数据丢失 - 您无法保证将数据发送到 Application Insights 的 ajax 请求将在页面导航离开和连接中断之前完成。在我对 IE 的测试中,损失大约为 50%。

关于javascript - 在 Application Insights 中使用 startTrackPage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058310/

相关文章:

javascript - 如何在 React 中正确处理 cookie

azure - 从 TeamCity 部署构建

database - 为基于日期的全局 DocumentDB 应用程序选择正确的 PartitionKey

c# - 在名为 test113.onmicrosoft.com 的租户中找不到名为 HTTPS ://test113. onmicrosoft.com/FTP 的应用程序

javascript - 如何使用 jquery 检测 Ctrl + Mouse dblclick

javascript - 在 react 路由器中的 child 之间传递数据

javascript - jQuery .is() 方法性能

jquery - 如何对 jquery 代码做 Style

jQuery:如何删除文本但不删除子元素

javascript - 如何在多个元素上处理相同的 jQuery 事件处理程序?