Мобильная загрузка jQuery, когда это не должно происходить, даже если для ajaxEnabled установлено значение false - PullRequest
0 голосов
/ 05 марта 2012

Я видел этот связанный вопрос , где jQuery mobile загружается в DOM. Однако в этом случае загрузка ajax была включена, и он использовал window.location для перемещения по страницам.

Я не использую window.location, просто обычные гиперссылки, и я отключил загрузку ajax:

$(document).ready(function() {
    // disable page transitions
    $.mobile.ajaxEnabled = false;
    $.mobile.defaultPageTransition = 'none';
    }

Тем не менее, если я:

  1. Начать на странице A
  2. Нажмите на ссылку на страницу B
  3. Нажмите кнопку "Назад" на моем телефоне Android
  4. Нажмите на ссылку на страницу C

Происходит следующее:

  1. Страница C загружается полностью, включая весь JavaScript и медиа
  2. Появляется изображение [loading ...]
  3. Содержимое страницы A загружается на страницу

Это ненадежно; иногда контент взят с более ранней страницы.

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

Обратите внимание, что это даже происходит для ссылок, которые явно помечены как data-ajax="false".

Кроме того, это не происходит в настольных браузерах, только в Android (и это также происходит в iPhone, хотя я тестировал его только с помощью симулятора).

1 Ответ

2 голосов
/ 05 марта 2012

Похоже, это было вызвано pushState.

Из официальной документации :

Важно: rel = "external" и $.mobile.ajaxEnabled = false

Немного отличающиеся реализации API replaceState в различных браузерах могут вызвать странное поведение в определенных сценариях.Например, некоторые реализации браузера (включая браузеры для настольных компьютеров) реализуют событие popstate по-разному при внешнем связывании и возвращении к странице, состояние которой уже было передано / заменено.При создании приложения jQuery Mobile, в котором навигация ajax явно отключена, либо путем частого использования rel="external" в ссылках, либо путем полного отключения навигации Ajax через $.mobile.ajaxEnabled=false, мы рекомендуем отключить функцию pushState для возврата к хешунавигация на основе для более последовательного поведения.

Все, что нужно, это добавить код для отключения pushState в заголовке:

<script src="//code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script type="text/javascript">
    $.mobile.pushStateEnabled = false;
</script>

Теперь это работает!

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