Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Estendere DOM e IE - Object.prototype

    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

  2. #2
    Ho capito: per IE, se non ci sono immagini e file esterni, il caricamento del markup ( onreadystatechange ) avviene sempre DOPO il caricamento di tutto il resto! ( onload )

    Mentre invece dovrebbe essere tutto il contrario.
    Infatti in Firefox onredystatechange si verifica PRIMA di onload!

    Come risolvo mo?
    C'è un'istruzione ( anche proprietaria di IE ) che mi permette di far avvenire l'onreadystatechange della pagina prima dell'onload? ( ricordo che lo script deve essere una libreria )

  3. #3
    UP.
    Un'altra soluzione sarebbe quella di fare in modo che un attachEvent di IE sia fatto prima di tutti gli altri attachEvent e di window.onload. Insomma, dargli la priorità.

  4. #4
    Per fortuna alla fine ho risolto da solo:
    document.attachEvent("onreadystatechange", addDOMProperties);
    //per IE
    window.addEventListener("load", addDOMProperties, false);
    //per FF e opera

    funziona perfettamente! anche se l'onload è nell'attributo onload di body!

    //__________________________________________________ ___

    Ora però avrei un altro quesito
    Ci sono su Internet dei tutorial che spiegano bene bene l'uso di prototype?

    Con gli oggetti ci sono, ma con gli array continuo a faticare...

  5. #5
    Tutorial su prototype? ( non sulla libreria, sulla proprietà nativa di javasscript )

  6. #6

  7. #7

    .........

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8

  9. #9
    Anche su questi due ho trovato poco, non so se avete tutorial:
    Array.prototype
    Object.prototype

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.