пара вещей, чтобы отметить в первую очередь. 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% независимы.
> Или один будет вызываться автоматически, а другой нет?
Они оба будут вызываться, если вы их определили.