Ответ 1
Прежде всего, нужно отметить пару вещей. 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>
. Среда serverside делает это. Астуальные читатели заметят, что этот трюк позволил MS решить проблему window.onload
, так как любой код, который вы помещаете в pageLoad
, будет запускаться независимо от двоичного содержимого (w/один редкий улов для IE).
> Они действуют одинаково?
Концептуально да, на практике вовсе не из-за указанной проблемы window.onload
. Единственное правило заключается в том, что вы должны поместить код, который взаимодействует с вашими элементами управления AJAX только в pageLoad
, так как window.onload
следует своей траектории события.
> Или один называется перед другим?
Они полностью, на 100% независимы.
> Или будет вызван автоматически, а другой нет?
Оба они будут вызваны, если вы их определили.