Сбой всплывающих окон в JQueryMobile 1.3.2 после обновления Chrome версии 43.0.2357.65 м

Последняя хромовая версия "43.0.2357.65 м" сломала JQueryMobile 1.3.2 для кого-либо еще? Когда я нажимаю всплывающее окно, оно переходит в верхнюю часть страницы, и полоса прокрутки исчезает. Это было хорошо в предыдущей версии.

Проблема влияет на мое приложение, но воспроизводится на демонстрационных страницах JQueryMobile:

  1. Используя Chrome 43.0.2357.65 m, перейдите по ссылке http://demos.jquerymobile.com/1.3.2/
  2. Нажмите на всплывающее окно
  3. На всплывающей странице нажмите кнопку "Войти" в середине страницы.
  4. Он перейдет в верхнюю часть страницы, и полоса прокрутки исчезнет.

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

Я поднял проблему с Chrome, но мне просто интересно, знает ли кто-нибудь, что происходит, и есть ли обходной путь, который я могу реализовать.

Спасибо!

2 ответа

Решение

Всплывающее окно кажется странным, его трудно повторить - переход к точной ссылке ниже и последующее нажатие на указанную кнопку "войти", кажется, гарантируют поведение. http://demos.jquerymobile.com/1.3.2/widgets/popup/

Я полагаю, что приведенное ниже решение может быть связано с исправлением других забавных проблем с переходом между слайдами (только ограниченный тест с всплывающим окном), но выглядит многообещающе

Переопределение ошибочной функции с помощью фрагмента кода ниже. Вы должны позвонить, прежде чем загружать jquerymobile JS

// Override of $.fn.animationComplete muse be called before initialise jquery mobile js
   $(document).bind('mobileinit', function() {
     $.fn.animationComplete = function(callback) {
       if ($.support.cssTransitions) {
         var superfy= "WebKitTransitionEvent" in window ? "webkitAnimationEnd" : "animationend";
         return $(this).one(superfy, callback);
       } else {

         setTimeout(callback, 0);
         return $(this);
       }
     };

   })

Справочная информация: jqueryMobile 1.3.2 реализует вложение обработчика событий jquery one() несколько неправильно.

.one () - "Присоединить обработчик к событию для элементов. Обработчик выполняется не более одного раза для каждого элемента для каждого типа события. ": http://api.jquery.com/category/events/: по сути, происходит событие и затем удаляется.

Однако вызов обоих ("webkitAnimationEnd and animationend") с использованием one () потенциально может означать, что только 1 (в зависимости от браузера) из двух обработчиков когда-либо срабатывает, оставляя другой слишком медленным и потенциально может вызвать утечку памяти.

Chrome43 обрабатывает как webkitAniationEnd, так и animationend, но только один в любой момент времени. Это заставляет другого задерживаться и запускаться при следующей анимации элемента.

Как обходной путь для меня, кажется, работает, если вы используете API jQueryMobile.

$('selector').popup('open');

вместо того, чтобы полагаться на разметку jQueryMobile

Моя версия Chrome "43.0.2357.81 м", и я тоже испытываю это

Другие вопросы по тегам