2

我正在为内部 WinJS 应用程序构建一些非常基本的分析。这意味着第 3 方分析解决方案会过度杀伤和/或不可行和/或违反第 3 方提供商的使用条款,因为它们通常不允许捕获有关用户的个人身份信息,在这种情况下,这是一项业务要求。

我正在尝试做的事情是确定在多个应用程序以及应用程序某些区域内的区域中花费了多少时间。为此,我显然需要知道他们何时进入和离开。

我发现的所有文档都说要使用WinJS.Application.oncheckpoint事件或Windows.UI.WebUI.WebUIApplication.onsuspending事件,这实际上似乎是同一个基本概念的两个访问点。问题是这并不能准确反映用户何时离开应用程序!暂停似乎只有在用户切换到另一个应用程序后才会发生,再加上大约 10 秒......如果系统觉得这样的话。

如果用户只是按下 Windows 键进入开始屏幕并坐在那里,应用程序将继续无限期地运行(对 setInterval 的调用能够影响状态)即使看不到应用程序!

我知道这有点极端,但是由于缺乏更好的定义,有没有更可靠的方法来判断用户何时看不到应用程序?

笔记:

  • 我确实查看了 Windows 8 的 Cordova 2.7 代码,他们正在使用检查点事件来驱动 Cordova 暂停事件。
4

2 回答 2

6

应用程序生命周期的应用程序可见性部分似乎解决了这个问题。这意味着注册“msvisibilitychange”事件,以了解用户何时离开并回到您的应用程序。

default.js:
document.addEventListener('msvisibilitychange', function ()
{
    console.log('visibility changed');
    console.log(document.visibilityState); // 'hidden' or 'visible'
});

此外,还需要处理暂停恢复和激活事件。

default.js:
Windows.UI.WebUI.WebUIApplication.onsuspending = function ()
{
    console.log('suspending');
}

Windows.UI.WebUI.WebUIApplication.onresuming= function ()
{
    console.log('resuming');
}    

不用说,需要处理排序的细微差别和/或事件缺席的情况。例如 - 如果用户离开并很快回来,将收到 visibilitychange 事件。而如果用户不回来,暂停事件可能会在一段时间后出现。如果应用程序没有终止,它可能会跟随恢复事件。否则,激活事件。

关于在特定页面上花费时间,页面readyunload方法应该有效。unload()如果应用程序被暂停或终止,将不会被调用。

于 2013-06-06T05:00:50.557 回答
1

https://developer.mozilla.org/en-US/docs/Web/Reference/Events/visibilitychange

使用可见性更改事件来识别用户何时无法再看到应用程序。

于 2013-06-06T03:59:11.567 回答