2013-06-05 40 views
2

我正在为内部WinJS应用程序构建一些非常基本的分析。这意味着第三方分析解决方案既可能矫枉过正和/或无法运行,也可能违反第三方提供商的使用条款,因为它们通常不允许捕获关于用户的个人身份信息,在这种情况下,这是一项业务需求。确定用户何时离开WinJS应用程序

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

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

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

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

注:

  • 我在科尔多瓦2.7代码看上去的确为Windows 8和他们正在使用的检查站事件驱动科尔多瓦暂停事件。

回答

6

关于Application lifecycle的应用可见性部分似乎解决了这个问题。这意味着注册“msvisibilitychange”事件,以了解用户何时离开并移回您的应用。

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

此外,suspendingresuming和激活的事件也需要处理。

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

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

不用说,排序的细微差别和/或事件不存在的情况需要处理。例如 - 如果用户离开并快速返回,则会收到visibilitychange事件。而如果用户不回来暂停事件可能会在一段时间后出现。如果应用程序未终止,则可能会继续重新开始事件。否则,激活事件。

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

+0

使用Windows 10应用程序中的'visibilitychange'(Edge webview)。 – daserge

1

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

使用可见性改变事件认识到,当用户不再能看到应用程序。

+0

我认为一个Mozilla链接被引用来回答WinJS问题很奇怪,但它确实有效!这个链接需要注意的重要一点是,一旦发生事件,您需要检查document.visibilityState以查看它是“可见的”还是“隐藏的”。 –

相关问题