Альтернативы window.onload

Есть ли другой вариант, чем window.onload=function; или <body onload="function();"> для вызова функции после загрузки страницы.

У меня есть скрипт, найденный в сети, который удовлетворяет мои потребности, но он переопределяет window.onload, поэтому я не могу использовать родной window.onload.

Есть ли альтернативы?


person user823527    schedule 13.07.2011    source источник


Ответы (6)


Вместо этого используйте addEventListener. К сожалению, это не работает в IE, но вы можете обойти это, также внедрив attachEvent.

window.addEventListener('load', function (){
    alert('Function #1');
});

window.attachEvent('onload', function (){
    alert('Function #1');
});
person Steve Glick    schedule 23.11.2016
comment
это предпочтительный способ делать что-то, когда не используются фреймворки. Кроме того, поскольку использование IE сокращается, количество attachEvent также уменьшается. - person tucuxi; 13.03.2019

Чтобы упростить себе жизнь, возьмите JQuery и используйте функцию document.ready для выполнения логики, которую вы хотите запустить в окне. в процессе.

person Perception    schedule 13.07.2011

У меня такая же проблема, но когда я убираю скобки, функция работает.

Заменять

window.onload = loadPage();

с

window.onload = loadPage;
function loadPage() {
if (document.getElementById("testElement").value)
    alert('whew');
}

и это работает.

person vic    schedule 18.01.2013
comment
Это связано с тем, что первый пример сообщает странице, что ее функция onload является типом, возвращаемым функцией loadPage(), и если это не возвращает функцию, от нее не будет много пользы. Второй пример, который работает, дает ссылку на функцию, а не вызывает ее (используя скобки), поэтому вы сообщаете, что onload — это функция. - person MickMalone1983; 17.07.2013
comment
Не совсем то, что они просят здесь - person tapsey; 12.07.2017

Не альтернатива, а обходной путь, да.

Если ваш скрипт, найденный в сети (FOTN), создает onload, просто создайте свой собственный onload после этого, например:

<html>
<body>
<script type="text/javascript">
window.onload = function(){ console.log("FOTN"); }
</script>
<script type="text/javascript">
var a = window.onload;
window.onload = function(){ 
    console.log("Handling before FOTN"); 
    a(); 
    console.log("Handling after FOTN"); 
}
</script>
</body>
</html>

Предпосылкой является то, что ваш onload определен в конце.

person eithed    schedule 23.11.2016

Это сразу же выполняет function() и присваивает возвращаемое значение функции window.onload. Обычно это не то, что вы хотите. function() должен был бы вернуть функцию, чтобы это имело смысл.

person Ваня В.    schedule 14.08.2018

У вас может быть несколько функций onLoad, так что это не должно быть проблемой.

person Community    schedule 13.07.2011
comment
Нет, вы не можете запустить несколько window.onload. - person Ashikodi; 07.11.2017