Chamando Múltiplas Funções onload do Windows em Javascript
Heres outro pedaço pouco de malandragem Javascript que eu tive que cavar em volta porque a situação commaned-lo. Em um dos meus sites da Web, eu tive esta situação onde eu tive que implementar "windows.onload" duas vezes. A primeira coisa que veio à mente um inexperiente como o meu (eu tenho que dizer honestamente que, uma vez que tenho vindo a utilizar frameworks JavaScript e bibliotecas, eu forgotton para fazer coisas simples no meu próprio ... triste mas é verdade), é o seguinte método ...
window.onload = onloadfn1; window.onload = onloadfn2; window.onload = onloadfn3; etc ..
Desculpe dizer, mas, isso não vai funcionar ... não quero discutir a ciência execução de Javascript muito ... mas de acordo com minha experiência recente, apenas a função anterior (onloadfn3) vai realmente mal executada.
Em situações normais, ao contrário do meu (que eu vou falar um pouco mais tarde) ... você poderia fazer uma das seguintes opções para executar funções de onload mutliple ....
Ou algo assim
doOnLoad function () { onloadfn1 (); onloadfn2 (); onloadfn3 (); } window.onload = doOnLoad;
Para a minha situação atual, eu não posso usar qualquer um dos acima ...
Por que eu preciso chamar windows.onload duas vezes, ao invés de chamar duas funções dentro de uma função onload único? Aqui é rápido olhar para a minha declaração do problema ...
"Páginas de meu site são estruturados como o tema do WordPress .... ou seja, há um header.php e footer.php comuns que é incluído em todas as páginas do site. Há uma implementaion função onload nos footer.php para fazer algumas funções onload comuns. E há poucas páginas que precisam de algo de sua própria OnLoad, além daqueles feitos pela função onload comum. Se eu atribuir função de callback diretamente para o manipulador de window.onload, ele irá sobrepor-se callbacks previamente designados nos footer.php "
.... O meu problema entendido
?
Bem! existem poucas soluções que eu encontrei. Todos eles são muito semelhantes e, principalmente, implementions de uma solução dada por Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Solução:
Basta adicionar este código javascript para o site ...
addLoadEvent função (func) { var oldonload = window.onload; if (typeof window.onload! = 'função') { window.onload = func Else {} window.onload = function () { if (oldonload) { oldonload () } func () } } }E chamá-lo de vez da "windows.onload" usual
addLoadEvent (FunctionToRunOnPageLoad); addLoadEvent (function () { / * Mais código para ser executado no carregamento da página * });
As vantagens deste trecho de código ...
1. Primeiramente, Ele permite que você tem eventos windows.onload múltiplos, chamados de partes separadas do seu código, sem overridding a definição anterior
2. É muito discreto. Pode ser colocado em um arquivo com seus outros scripts ou em um arquivo separado.
3. Ele funciona mesmo window.onload já foi definido.










































