Cerco di spiegartelo.. non è così semplice.
Puoi utilizzare window.onload ma non nel modo in cui hai fatto tu.
"onload" è un gestore di evento. Ciò significa che tu puoi attribuire a questo una determinata funzione in modo che sia richiamata nel momento in cui avviene tale evento:
In questo modo:
codice:
function unafunzione (){
alert("questa è unafunzione");
}
window.onload = unafunzione;
"unafunzione" è dichiarata inizialmente ma non sarà richiamata fintanto che non avvenga l'evento onload.
Infatti su onload ho assegnato solo il "riferimento" alla funzione ma non la sto richiamando in quel preciso istante in cui viene letta quella riga. Saprai bene che per richiamare una qualsiasi funzione devi apporre le parentesi dopo il nome della funzione:
ma nel tuo caso non devi richiamare la funzione. Devi solo assegnarla al gestore onload.
Tu hai scritto:
codice:
window.onload=wall.init();
dal momento che stai cercando di richiamare la funzione (e non hai semplicemente indicato il suo riferimento) l'interprete javascript si aspetta che wall.init() restituisca un valore da assegnare a window.onload. Ovvero esegue tale funzione. Ma cosa trova dentro quella funzione? ... questo codice, che tenterà di eseguire:
codice:
wall.id=document.getElementById('prova');
wall.id.style.background = wall.color;
Ora, siccome la pagina non è stata caricata completamente, quindi tutto ciò che è contenuto nel body ancora non esiste in quel preciso istante in cui hai richiamato wall.init(). E' ovvio che questa istruzione restituisce un valore nullo:
codice:
document.getElementById('prova')
e quella dopo (essendo "wall.id" = null):
codice:
wall.id.style.background = wall.color;
..genera un errore perché .stylecompagniacantante non esistono in un oggetto null:
Per concludere, puoi usare window.onload in questo modo (nota la mancanza delle parentesi):
codice:
window.onload=wall.init;
Oppure creando una funzione generica in cui poi richiami la tua funzione:
codice:
window.onload=function(){wall.init();}
Che sostanzialmente è ciò che avviene con questo (nota che in questo caso ci vanno le parentesi):
codice:
<body onload="wall.init();">