В мобильном сафари на iPhone или iPod Touch, если пользователь нажимает на ссылку mailto, а затем возвращается на страницу (отправляет или отменяет), таймеры больше не работают внутри javascript. Я отправил ошибку в яблоко и на openradar.iPhone/iPod Touch mailto link уничтожает таймеры javascript
Однако мне было интересно, если кто-то там встретил это раньше и придумал какое-то обходное решение.
обновление: Вот некоторые примеры кода
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing</title>
</head>
<body>
<h1 id="normal">Normal: 0</h1>
<h1 id="timed">Timed: 0</h1>
<h1 id="interval">Interval: 0</h1>
<a id="clicker">Click Me</a><br />
<a href="mailto:">Mail To</a>
<script type="text/javascript">
window.addEventListener('load', function()
{
var count = 0;
var interval = 0;
var id;
document.getElementById('clicker').addEventListener('click', function() {
interval = 0;
count++;
document.getElementById('normal').innerHTML = 'Normal: ' + count;
setTimeout(function() {document.getElementById('timed').innerHTML = 'Timed: ' + count; }, 100);
id = setInterval(function()
{
interval++;
if(interval > 5)
{
clearInterval(id);
return;
}
document.getElementById('interval').innerHTML = 'Interval: ' + interval;
}, 200);
}, false);
}, false);
</script>
</body>
</html>
Чтобы прояснить некоторые очевидные путаницы о том, что я говорю, это ошибка, его не то, что, когда вы покидаете страницу и вернуть таймеры, пробежавший остановились, этого и следовало ожидать. Проблема в том, что как только пользователь вернется на страницу, если вы запустите новые таймеры, они никогда не будут стрелять.
Я не говорю, что таймеры, которые бежали, останавливаются, я бы это полностью понял. Я говорю, что как только вы нажмете ссылку mailto и вернетесь на страницу. Я больше не могу устанавливать таймер. Посмотрите пример кода, если вы запустили его на iPod touch или iPhone, вы щелкаете по ссылке mailto, а затем возвращаетесь независимо от того, сколько раз вы нажимаете ссылку «Click Me» на таймеры, никогда не будут сброшены. – Boushley
Правильно, но есть ли перезагрузка страницы между тем, как снимать приложение Safari и возвращаться обратно, чтобы нажать кнопку? Если нет, это не сработает. Safari кэширует страницу и останавливает все процессы страниц. Вы не видите живую страницу. Вы видите изображение последнего кэшированного изображения страницы. Вот почему вы слишком долго не используете приложение, и оно перезагружается. Единственный способ перезагрузки - перезагрузить страницу. Возможно, вы найдете способ заставить это поведение. Как только вы это получите, просто установите cookie и начните с того места, где оно было остановлено. – dclowd9901
Кстати, у меня была эта же проблема с плагином JS, который я написал недавно. Это было довольно бешено, но единственным обходным решением, которое я мог придумать, было увольнение «window.location». – dclowd9901