Originariamente inviato da Xinod
perfetto Andrea, tutto chiaro
in realtà sono venute fuori novità su quella funzione ... parlandone con gli sviluppatori di Dojo ...
intanto credo di aver scritto una versione più leggera ed elegante .... questa:
codice:
function onContent(callback){
__onload__={
E:function(){window.onload=null;callback()},
IES:function(e){if(e.readyState==="complete")this.E()},
FO:document.addEventListener?"document.addEventListener('DOMContentLoaded',__onload__.E,false)":"void(0)"
};
onload=callback;
if(/WebKit|Konqueror/i.test(navigator.userAgent))
(function(){/loaded|complete/.test(document.readyState)?__onload__.E():setTimeout(arguments.callee,1)})();
else if(!window.opera||parseInt(window.opera.version())>=9)
document.write('<scr'+'ipt src="javascript:'+__onload__.FO+'" defer="defer" onreadystatechange="__onload__.IES(this)"></scr'+'ipt>');
};
che non usa i condizionali ed inoltre è ben supportata anche da Konqueror, il browser Linux di KDE che sta a pari passo con Safari ... questa funzione può essere facilmente gestibile per eventi multipli tramite questa:
codice:
function addContentEvent(callback) {
if(!window.__onload__)
onContent(function(){__onload__.callEvents()});
__onload__.callEvents = function() {
for(var i = 0; i < __onload__.events.length; i++)
__onload__.events[i]();
};
if(!__onload__.events)
__onload__.events = [callback];
else
__onload__.events[__onload__.events.length] = callback;
};
utilizzabile, ad esempio, in questo modo:
codice:
addContentEvent(function(){alert("hello dom 1")});
addContentEvent(function(){alert("hello dom 2")});
il tutto è descritto, a livello di concetti e codice, in questo mio post nel mio blog:
http://webreflection.blogspot.com/20...entloaded.html
mentre per chi avesse dubbi sulla vecchia proposta con la verifica del document.body, rimando a questo link:
http://webreflection.blogspot.com/20...entloaded.html
Le novità di cui parlavo riguardano sempre la funzione proposta da Dean Edwards e qui riadattata da me ... in pratica questa funzione genererà degli alert se usata in spazi SSL (tipo https). Questo avviene perchè il source impostato tramite javascript, quindi dinamico, a prescindere che sia void(0), ovvero undefined, oppure no, viene visto male dalla modalità sicura SSL perchè il file potrebbe non essere stato inviato dal server e quindi non è detto che sia affidabile.
In pratica i source dinamici vengono interpretati come:
il server non ha inviato questo file quindi ci sono alcuni script sicuri ed altri insicuri.
Stando a quanto dettomi da uno sviluppatore Dojo la soluzione è non usare il source (src) dello script e scrivere codice direttamente al suo interno:
codice:
<script defer>imposta_DOMOnLoad();</script>
sempre aggiungendo lo script dinamicamente ... unico problema è che così IE non fa più un tubo se non il solito onload e dovrei approfondire questo approccio ... solo che in questo momento Google è down e Gmail non funziona 
Se interessati continuerò a postare gli sviluppi o se mai ce ne sarà uno, il metodo ufficioso che nonda problemi di sorta in qualunque ambiente