JS: запуск после загрузки страницы

Иногда нет возможности прописать запуск скрипта в <body onLoad=...> или в конце страницы. Приходится использовать событие window.onload, но оно произойдет только после полной загрузки страницы вместе с картинками и флешем. К счастью в нормальных браузерах есть DOMContentLoaded, решающее эту проблему.

Для браузеров не поддерживающих DOMContentLoaded есть хаки для его эмуляции: dpp.su, xhtml.ru, но мне не хочется использовать извращенные функции, поэтому пользователи этих браузеров будут ждать window.onload :)

У window.onload есть одно неприятное ограничение - на него можно навесить только одну функцию. Самое удобное решение этой проблемы предложено здесь. Кстати, у IE есть window.attachEvent('onload', function(){}), что идентично window.addEventListener("load",function(){}, false), но доработанный window.onload - то же самое.

onReady = function(e){
	if (window.addEventListener) {
		window.addEventListener("DOMContentLoaded",function(){eval(e)}, false)
	} else {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') { window.onload = function(){eval(e)};} 
		else {window.onload = function() { if (oldonload) {oldonload();} eval(e);}}
	}
}

Зачем нужен eval? Чтобы запускать функции с аргументами, например onReady("myFunc('a','b')").

Комментарии (RSS)

  • # Holy Diver: Какое-то странное решение, все браузеры поддерживаются?
  • # sartas: А в чем странность?

    Если браузер поддерживает window.onload, то в нем будет работать этот скрипт.

Оставить комментарий: