iOS 8手机safari错误的触摸事件时间戳

问题描述:

我读了很多关于在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

这个问题可能是没有更多的是最新的,所以我建议阅读关于这个问题,下面的文章。

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

我在iOS上发现了同样的问题8.1.2
我试过使用这段代码,它工作正常!

var date = new Date(); 
var timeStamp = date.getTime(); 

裁判:http://help.dottoro.com/ljmhtrht.php