JQuery ожидает загрузки изображений перед выполнением document.ready - PullRequest
47 голосов
/ 25 января 2009

Обновление: Эта ошибка была подтверждена как минимум двумя другими. Даже если вы не читаете мой полный пост - если вы читаете это и используете JQuery 1.3.1, тогда прекратите использовать его , если вы полагаетесь на любые обработчики, которые вы хотите выполнить, когда DOM завершен, но до загрузки изображений страницы.

Update2 : Спасибо Tom (идентификатор пользователя 20!) За размещение ссылки на тикет на трекере ошибок jQuery.

Обновление 3 - 2009/01/28: Проблема была правильно решена (для тех, для кого возврат к 1.2.6 невозможен). Для тех, кто в настоящее время использует 1.3.1 и нуждается в немедленном исправлении, вы можете прочитать принятый ответ ниже для направления. Спасибо Джон.


Я только что обновился до JQuery 1.3.1, и мне потребовалось несколько часов, чтобы понять, что моя любимая

$(function( ) {  ... }
Синтаксис

теперь ожидал загрузки всей страницы (включая изображения) перед выполнением тела функции. Я видел странное поведение при попытке интегрировать меню Yahoo. (К счастью, у меня были медленные загрузки изображений на моей странице, что заставило меня осознать проблему)!

Я сделал тестовый файл, потому что понял, что происходит что-то более сложное, но у меня все еще были те же симптомы, даже с этим простым файлом.

<head>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>   
   <script>
    $(function() {    
      alert("Ready"); 
    });
  </script>
</head>

<body>      
  <img src="<PATH_TO_DYNAMIC_IMAGE>_1.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_2.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_3.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_4.jpg" />       
</body>

Разные версии JQuery дали разные результаты:

  • В версии 1.2.6 происходит то, что окно оповещения отображается мгновенно, а затем я вижу загружаемые изображения позади него (ожидаемое и задокументированное поведение).
  • Что происходит в версии 1.3.1, так это то, что все изображения загружаются, и только после этого появится окно с предупреждением.

Что происходит! Это новая функция (не могу представить почему) или ошибка?

Важно: Это кажется проблемой только в IE, а не в firefox

Извините, у меня нет файла динамического изображения, который был бы публично доступен, чтобы другим было легче это увидеть. Если вы хотите проверить это, я предлагаю использовать большой файл изображения, выбранный случайным образом из изображений Google, и очистить кэш.

Ответы [ 4 ]

57 голосов
/ 29 января 2009

Это было связано с ошибками jQuery # 2614 и # 3880 - были определенные проблемы с готовым кодом в IE в 1.2.6 и в 1.3 - и теперь другой набор проблем в 1.3.1.

Более подробное обсуждение можно найти здесь:
http://groups.google.com/group/jquery-dev/browse_thread/thread/3abf45d3fd4d50fc

А билет, связанный с проблемой, можно найти здесь (если вы обнаружите дополнительные проблемы с исправлением, пожалуйста, заново откройте билет и отправьте сообщение в вышеупомянутую ветку jquery-dev):
http://dev.jquery.com/ticket/3988

Я только что получил исправление для этого в SVN rev 6170 .

Я только что запустил новую ночную программу, которую вы можете использовать, пока не выйдет финальная версия 1.3.2:
http://code.jquery.com/nightlies/jquery-2009-01-28.js

Извините за задержку с получением исправления - путешествовал на этой неделе.

4 голосов
/ 27 января 2009

Вот обновление отправленного мной билета . Кажется, что @ Webdawson прикрепил образец страницы к заявке.

4 голосов
/ 25 января 2009

Есть некоторые вещи, которые просто не могут быть проверены юнитом. Только что подтверждено в IE6 + 7 и 1.3.1. Черт возьми, какая огромная регрессия.

Итак, у вас есть время сообщить об этом? Только что проверил, и это не известная ошибка для 1.3.1.

3 голосов
/ 27 января 2009

да, я добавил пример, это явно ошибка в IE6 & 7 (я не проверял его в других версиях IE). Кажется, что в версии 1.3.1 есть много ошибок. :(

Вот пример ссылки: http://www.kollermedia.at/jquery_bug.html

...