2010-05-17 3 views
1

В мобильном сафари на 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> 

Чтобы прояснить некоторые очевидные путаницы о том, что я говорю, это ошибка, его не то, что, когда вы покидаете страницу и вернуть таймеры, пробежавший остановились, этого и следовало ожидать. Проблема в том, что как только пользователь вернется на страницу, если вы запустите новые таймеры, они никогда не будут стрелять.

ответ

1

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

Хотя это не очень приятно, ожидается.

+0

Я не говорю, что таймеры, которые бежали, останавливаются, я бы это полностью понял. Я говорю, что как только вы нажмете ссылку mailto и вернетесь на страницу. Я больше не могу устанавливать таймер. Посмотрите пример кода, если вы запустили его на iPod touch или iPhone, вы щелкаете по ссылке mailto, а затем возвращаетесь независимо от того, сколько раз вы нажимаете ссылку «Click Me» на таймеры, никогда не будут сброшены. – Boushley

+0

Правильно, но есть ли перезагрузка страницы между тем, как снимать приложение Safari и возвращаться обратно, чтобы нажать кнопку? Если нет, это не сработает. Safari кэширует страницу и останавливает все процессы страниц. Вы не видите живую страницу. Вы видите изображение последнего кэшированного изображения страницы. Вот почему вы слишком долго не используете приложение, и оно перезагружается. Единственный способ перезагрузки - перезагрузить страницу. Возможно, вы найдете способ заставить это поведение. Как только вы это получите, просто установите cookie и начните с того места, где оно было остановлено. – dclowd9901

+0

Кстати, у меня была эта же проблема с плагином JS, который я написал недавно. Это было довольно бешено, но единственным обходным решением, которое я мог придумать, было увольнение «window.location». – dclowd9901

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