iPhone jQuery ломается после запуска наложения электронной почты - PullRequest
3 голосов
/ 05 февраля 2010

Я разрабатываю мобильный сайт для iPhone с использованием jQuery. У меня есть скрытый div (класс .tile-content), который содержит некоторый контент. Нажав на ссылку с onclick="showContent(this)", вызовы исчезают, например:

        function showContent(obj)
        {
            alert($(obj).html());
            $(obj).next('.tile-content').fadeIn();
            return false;
        }

Все прекрасно работает, пока я не нажму "напишите нам", на которой есть ссылка mailto:, и активирует встроенную в iPhone функцию наложения электронной почты Затем я нажимаю «Отмена» и возвращаюсь на сайт. Теперь, если я нажму на ссылку, мой .tile-content div не будет отображаться. Я получаю надлежащее предупреждение на iPhone, хотя. После того, как я нажму это один раз, ничего не работает (что, я думаю, означает, что произошла ошибка js?). Очень трудно отлаживать на физическом iPhone. Есть идеи?

Обновление: Я включил отладочную консоль Safari Mobile благодаря подсказке от @John Boker ниже. Ошибки не отображаются, но у меня все та же проблема.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2010

Проблема возникает внутри функций javascript setInterval / setTimeout. При запуске почтового окна в Safari на iPhone кажется, что внутренний таймер, используемый для этих функций, приостановлен. После отправки электронного письма (или нажатия кнопки «Отмена») таймер останется приостановленным, и функции setTimeout / setInterval не сработают.

Это сломает все, что зависит от setTimeout / setInterval, например анимации jquery и любые асинхронные вызовы ajax, поскольку jquery использует setInterval для опроса, пока запрос не вернется (я сам решил эту проблему).

Если вы нажмете на строку URL-адреса, затем нажмете «Отмена» или нажмите кнопку выключения на телефоне и вернитесь к сафари, функции сработают, и все начнет работать. Не совсем приемлемый обходной путь.

1 голос
/ 05 февраля 2010

Если вы перейдете на

settings -> safari -> developer -> debug console

вы можете включить отладку и увидеть ошибки JavaScript

0 голосов
/ 05 февраля 2010

Единственный способ заставить его работать - убить анимацию fadeIn / fadeOut и просто использовать вместо нее show / hide.

$(this).parent('.tile-content').hide();

Итак, тайна наложения электронной почты остается неразгаданной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...