确定用户何时离开WinJS应用程序

Dav*_*ike 2 windows-runtime winjs cordova

我正在为内部WinJS应用程序构建一些非常基本的分析.就拿这意味着第三方分析解决方案将既矫枉过正和/或不可行的和/或对使用的第三方供应商而言,他们通常会禁止捕捉有关用户的个人身份信息,在这种情况下这是一个业务需求.

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

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

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

我知道这是一个边缘情况,但是有没有更可靠的方式告诉用户何时无法看到应用程序,因为缺乏更好的定义?

笔记:

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

Sus*_*hil 6

应用程序生命周期中的 App Visibility部分似乎解决了这个问题.这意味着注册"msvisibilitychange"事件,以了解用户何时离开并移回您的应用程序.

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

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

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

Windows.UI.WebUI.WebUIApplication.onresuming= function ()
{
    console.log('resuming');
}    
Run Code Online (Sandbox Code Playgroud)

不用说,需要处理订购的细微差别和/或不存在的事件.例如 - 如果用户离开并快速返回,将收到visibilitychange事件.而如果用户没有回来,暂停活动可能会在一段时间后到来.如果应用程序未终止,则可能之后是恢复事件.否则,激活事件.

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