Пара вещей, которые следует отметить в первую очередь. MS изобрела своего рода «клиентский объект времени выполнения» под названием Sys.Application. . Он обрабатывает события init, load и unload на протяжении всего [клиентского] жизненного цикла страницы следующим образом:
Sys.Application.initialize() начинает init часть жизненного цикла. Это initialize() всех элементов управления AJAX на стороне клиента, после чего они готовы к программному взаимодействию.
Sys.Application начинает load часть жизненного цикла, вызывая все обработчики, подписавшиеся на это событие.
- Наконец, он вызывает глобальную функцию
pageLoad (если она определена)
Шаги 2) и 3) повторяются для каждой частичной (т. е. AJAX + UpdatePanel) обратной передачи.
Итак, наконец, ответ: pageLoad — это просто удобный ярлык для Sys.Application.add_load().
Однако что касается его отношения к window.onload, все становится интереснее. По сути, MS требовалось, чтобы window.onload сработало только после завершения фазы init. Но вы не можете контролировать, когда браузер сработает onload, так как он привязан к "загруженному содержимому". Это известно как "проблема window.onload":
Событие onload срабатывает после загрузки всего содержимого страницы (включая изображения и другой двоичный контент). Если на вашей странице много изображений, вы можете увидеть заметную задержку перед тем, как страница станет активной.
Итак, они просто изобрели свою собственную «специальную» функцию, которая срабатывает в нужное время в жизненном цикле события, и назвали ее "pageLoad". И трюк, который они использовали для запуска этого пользовательского жизненного цикла события, заключался в том, чтобы поместить вызов Sys.Application.initialize() непосредственно перед закрывающим тегом </form>. Серверная среда выполнения делает это. Проницательные читатели заметят, что этот трюк позволил MS решить проблему window.onload, поскольку любой код, который вы поместите в pageLoad, будет срабатывать независимо от двоичного содержимого (с одним редким уловом для IE).
› Они действуют одинаково?
Концептуально да, на практике вовсе нет из-за упомянутой проблемы window.onload. Единственное правило заключается в том, что код, взаимодействующий с вашими элементами управления AJAX, следует помещать только в pageLoad, поскольку window.onload следует своей собственной траектории событий.
› Или один вызывается перед другим?
Они полностью, на 100% независимы.
› Или один будет вызываться автоматически, а другой нет?
Они оба будут вызываться, если вы их определили.
person
Crescent Fresh
schedule
02.03.2009