Sto provando a estendere il DOM per una libreria, e in parte ci sono riuscito.
(Questa è la parte che non da problemi, il problema è verso la fine del post.)
Piuttosto che postare il codice del mio nuovo metodo ( sarebbe una complicazione inutile ), posto un esempio più semplice e stupido:
codice:
//nuovo metodo
function getElementsByTagName_nuovo(mytags) {
elementi=new Array();
elementi=this.getElementsByTagName(mytags);
return elementi;
}
Object.prototype.getElementsByTagName_nuovo=getElementsByTagName_nuovo;
Questo è un metodo nuovo che può essere richiamato tipo con document.getElementsByTagName_nuovo("span")
Ovviamente Object.prototype non mi funziona con IE.
Per ovviare a ciò faccio così
codice:
function addDOMProperties() {
if(navigator.appName=="Microsoft Internet Explorer")
{
for(var i=0; i!=document.getElementsByTagName("*").length; i++)
{
document.getElementsByTagName("*")[i].getElementsByTagName_nuovo=getElementsByTagName_nuovo;
}
document.getElementsByTagName_nuovo=getElementsByTagName_nuovo;
}
}
Questa funzione deve ovviamente avvenire all'onload. Visto che io voglio fare una libreria non posso usare window.onload, ma la funzione addDOMLoadEvent ( è una libreria ). Fin quà funziona tutto.
Il problema sorge quando poi bisogna usare questo nuovo metodo proprio all'onload della pagina. Scrivendo così non funziona
codice:
window.onload=function() { document.getElementsByTagName_nuovo("a")[0].setAttribute("href", "page.htm"); }
Invece così si!
codice:
addDOMLoadEvent(function() {
document.getElementsByTagName_nuovo("a")[0].setAttribute("href", "page.htm");
});
Io però non posso obbligare ad usare addDOMLoadEvent ( sennò che libreria è! ), come faccio? Posso senno fare in modo che facendo window.onload in realtà si richiama addDOMLoadent?
PS: Ho visto che c'è uno script molto simile ad addDOMLoadEvent, quello di Andr3a, ma credo che il problema si ripresenterebbe lo stesso dato che entrambi usano per IE onreadystatechange. Inoltre ho provato con il più classico attachEvent solo per IE ma non va.
Spero di non fare la solita magra figura