2013-06-05 46 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以查看它是「可見的」還是「隱藏的」。 –

相關問題