1

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

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

我已经逐步完成了代码,并且在我调用它时似乎没有创建该函数。trackPageView() 已经定义了。我也尝试在加载文档后调用该函数,但仍然失败。但是,一旦页面加载,我就可以从开发者控制台调用它。

是我最初找到有关 startTrackPage() 和 stopTrackPage() 信息的地方。除此之外,我一直在仔细阅读,看看是否有其他人遇到过这种情况。

我很感激帮助。

App Insight 的默认代码:

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

我试过的:

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

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

4

1 回答 1

2

简短的回答:不幸的是,目前无法以您想要的方式可靠地使用 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%。

于 2015-05-06T02:03:01.390 回答