Инициализация компонентов JS в конце HTML или "onload"? - PullRequest
2 голосов
/ 03 апреля 2009

Некоторое время я выполнял инициализацию компонента JavaScript, ожидая, пока не сработает событие "onload", и выполнил main() своего рода. Он казался чище, и вы могли быть уверены, что состояние ID вашей DOM было в порядке. Но после некоторого времени, проведенного в этом направлении, я обнаружил, что инициализация компонента была заблокирована каким-либо ресурсом, зависшим во время загрузки (изображения, CSS, iframes, flash и т.

Теперь я переместил вызов инициализации в конец самого HTML-документа, используя встроенное <script /> выполнение, и обнаружил, что он инициирует инициализацию раньше других внешних ресурсов.

Теперь мне интересно, есть ли какие-то подводные камни, связанные с этим, вместо того, чтобы ждать «загрузки».

Какой метод вы используете?

РЕДАКТИРОВАТЬ : Спасибо. Кажется, что каждая библиотека имеет специализированную функцию для DOMContentLoaded / readyState различий в реализации. Я использую прототип, так что это то, что мне нужно.

Ответы [ 5 ]

4 голосов
/ 03 апреля 2009

Для меня мы используем jquery, и его состояние готовности документа гарантирует, что DOM загружен, но не ожидает ресурсов, как вы говорите. Конечно, вы можете сделать это без фреймворка javascript, для этого требуется функция, которую вы можете создать, например: document ready Теперь, по большей части, помещая скрипт в конец страницы, убедитесь, что остальные страница есть, но убедиться, что DOM готов, никогда не бывает плохо.

2 голосов
/ 03 апреля 2009

Jquery имеет $ (документ) .ready ()

Идеальная точка для выполнения большинства сценариев - это когда документ готов, а не обязательно, когда он «загружен».

Смотрите здесь

1 голос
/ 04 апреля 2009

Правильный способ обойти эту проблему - использовать событие DOMContentLoaded, которое поддерживается не во всех браузерах. Существуют хаки (например, опрос doScroll() или использование onreadystatechange), поэтому библиотеки могут предоставлять эту функцию во всех браузерах.

Но все еще существуют проблемы с DOMContentLoaded и частичными передачами, которые не были решены в популярных JavaScript-фреймворках.

Вот мой взгляд на проблему .

1 голос
/ 03 апреля 2009

Это не соответствует какой-либо (X) спецификации HTML, и я бы посоветовал против этого. Это переведет ваш сайт в режим браузера.

1 голос
/ 03 апреля 2009

Я не использую ни один. Вместо этого я зависим от onDomReady () YUI (или onContentReady () / onAvailable ()), потому что он обрабатывает время инициализации для меня.

(Другие библиотеки JS имеют аналогичные методы для выполнения только после полной загрузки страницы, так как это распространенная проблема JS.)

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