2014-10-03 98 views
1

我讀了很多關於在iOS 8中滾動問題和禁用Javascript的信息。但是我面對的是一種奇怪的行爲,在我看來,它就像另一個bug。iOS 8手機safari錯誤的觸摸事件時間戳

我有一個運行在cordova phonegap內的hyprid web應用程序。一切工作正常,我不使用滾動監聽器。不知何故,在一些將應用程序推入背景並再次展現前景(到目前爲止我無法找出它發生的原因)後,所有觸摸事件時間戳都會延遲10秒。

我使用sencha觸摸框架捕獲這個時間戳來處理功能。

很高興聽到其他人面對同樣的行爲或已經得到解決方案。同時我會做更多的測試並更新這篇文章的更多詳細信息。

感謝

UPDATE:

document.addEventListener('touchstart', function(e){ 
    console.log('touchdelay: ' + (Date.now() - e.timeStamp)); 
}, false); 

//returns: 
//touchdelay: 11699655 

因此本次測試我做了剛纔告訴我說,事件發生3個多小時前。

UPDATE2: 我能夠通過打開移動Safari瀏覽器,加載任何頁面,推手機進入休眠模式,等待15秒,打開Safari重現於iPhone 5S的錯誤。

我打開了一個關於蘋果bug系統的bug報告。

+0

我看到一些類似的主屏幕上的應用程序在iOS 8.1.2 iPad 5上出現問題。分析客戶系統返回的一些實例(由於應用程序的性質我們記錄了詳細的時間數據),因此我們已經看到e.timeStamp與日期相比較。現在()大約160分鐘,20分鐘和10分鐘(就在我們看過的問題案例中)。我們還沒有設法自己複製這個問題。 – TomW 2015-01-06 11:24:49

+0

在iOS 8.1.2 iPhone 6S上也是如此。 Auck Fpple! – 2015-06-02 03:35:24

回答

0

這個問題可能是沒有更多的是最新的,所以我建議閱讀關於這個問題,下面的文章。

https://w3c.github.io/hr-time/#time-origin

根據W3C的定義所有主流瀏覽器都可能要改變的時間戳行爲。從49版開始,Chrome就已經是這樣了。時間戳不再代表時代,但時間點您上次刷新您的網站:

https://developers.google.com/web/updates/2016/01/high-res-timestamps?hl=en

所以,要小心在事件時間戳相信是劃時代的時間。

對於加入之前的事件處理程序爲您的應用程序正在同時與您可以添加類似的片段兼容:

var dateNowAtLoad = Date.now(); 
ontouchmove = (e) => { 
    if (e.timeStamp > dateNowAtLoad) { 
      // epoch timestamp -> old path 
     } else { 
      // high-res timestamp -> new path 
     } 
} 

或者檢出此相關的插件:

https://github.com/majido/high-resolution-timestamp-polyfill/blob/master/translate-timeStamp.js