2014-10-03 7 views
1

Я много читал о проблемах с прокруткой в ​​iOS 8 и отключил Javascript. Но я столкнулся с странным поведением, которое кажется мне похожим на другую ошибку.iOS 8 mobile safari неправильная метка времени при событиях касания

У меня есть приложение для веб-браузера, которое работает в телефонной связке cordova. Все работает отлично, и я не использую прослушивателей прокрутки. Каким-то образом после некоторого нажатия приложения на задний план и вывода на передний план (пока я не смог выяснить, почему это происходит), все временные метки события события задерживаются на 10 секунд.

Я использую sencha touch framework, который фиксирует эту временную метку для управления функциональностью.

Было бы приятно услышать, если кто-то другой сталкивается с таким же поведением или уже получил решение для этого. Тем временем я буду делать больше тестов и обновлять этот пост с более подробной информацией.

Благодаря

UPDATE:

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

//returns: 
//touchdelay: 11699655 

Так что этот тест я только сейчас говорит мне, что это событие произошло более 3-х часов назад.

UPDATE2: Я могу воспроизвести ошибку на iPhone 5s, открыв мобильный сафари, загружая любую страницу, нажав на телефон в спящий режим, ожидание в течение 15 секунд, открытое сафари.

Я открыл отчет об ошибке в системе ошибок яблока.

+0

Я вижу некоторые аналогичный проблемы на iOS 8.1.2 iPad 5, на домашнем экране веб-приложения. Анализируя несколько экземпляров, возвращающихся из клиентских систем (мы записываем подробные данные о времени из-за характера нашего приложения), мы видели, что e.timeStamp будет отсутствовать по сравнению с Date.теперь() примерно на 160 минут, 20 минут и 10 минут (только в проблемных случаях, на которые мы смотрели). Нам еще не удалось повторить этот вопрос. – TomW

+0

То же самое на iOS 8.1.2 iPhone 6S. Auck Fpple! –

ответ

0

Этот вопрос не может больше не в курсе, поэтому я предлагаю прочитать следующие статьи относительно этого вопроса.

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

Согласно определению W3C, все основные браузеры могут собирается изменить поведение временной метки. Так сделал хром уже с версии 49 на. не Отметка больше не представляет собой эпоху, но в момент времени вы в последний раз обновляли свой сайт:

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

Так что будьте осторожны верить в TIMESTAMP событий это время эпохи.

Для совместимости с обеими вы можете добавить аналогичный фрагмент кода, прежде чем обработчики событий добавлены для вашего приложения:

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

0

Я нашел ту же проблему с вами для iOS 8.1.2
Я попытался использовать этот код, он работает!

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

исх: http://help.dottoro.com/ljmhtrht.php

Смежные вопросы