Notizie: lo sai che puoi installare Firefox anche su dispositivi Apple iPhone e iPad? Provalo subito!

Autore Topic: [Developer] Problemi con FF3. getElementsByTagName non trova l'iframe  (Letto 1917 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Ryozzo

  • Post: 9
Ciao a tutti
Sto creando un'estensione per firefox ma ho riscontrato un problema.
Questa estensione, aggunge una voce al menu nella barra degli strumenti che, se cliccata, dovrebbe aggiungere una tabella come ultimo oggetto del primo iframe che trova (naturalmente una volta che avrò risolto, farò un controllo per verificare che funzioni solo sul sito che miserve)
Il mio codice funziona in locale e funziona anche se lo aggiungo ad una pagina qualsiasi di qualsiasi sito che abbia un iframe con firebug ma non funziona se creo l'estensione e poi richiamo la funzione.

Penso che il problema stia nella getElementsByTagName che non riconosce gli iframe ma non capisco perchè.
Lavoro solamente con FF3, non ho provato su FF2. :fx:

Qualcuno ha incontrato il mio stesso problema?
Codice: [Seleziona]
    function mostraskill()
    {
        var skills = new Array();
        var nski = 0;
        var mediaAC = 0;
        var mediaAL = 0;


        var fi = getFrame();
        var framePlayer = fi.contentWindow.document;

        var immagini = framePlayer.images;
      
        for(var i = 0; i < immagini.length; i++)
        {
            if(endsWith(immagini[i].src,"a.gif"))
            {
                skills[nski] = parseInt(immagini[i].alt);
                nski = nski + 1;
            }
        }

      
        var tool = document.createElement('table');
        var tbodyTool = document.createElement('tbody');
        var riga = document.createElement('tr');
        var ruoli = document.createElement('td');
        var stili = document.createElement('td');
        stili.align="left";
        stili.style.backgroundColor="dodgerblue";
        riga.appendChild(ruoli);  
        riga.appendChild(stili);
        tbodyTool.appendChild(riga);  
        tool.appendChild(tbodyTool);  
    
        var table = document.createElement('table');
        var tbody = document.createElement('tbody');
        table.appendChild(tbody);


        var rowOff = document.createElement('tr');
        creaCella("A L:"+media(new Array(skills[0], skills[1], skills[3], skills[5], skills[7], skills[9])),rowOff);
        creaCella("A C:"+media(new Array(skills[0], skills[1], skills[5], skills[6], skills[7], skills[8], skills[9], skills[12])),rowOff);
        creaCella("",rowOff);
        var rowOff2 = document.createElement('tr');
        creaCella("",rowOff2);
        creaCella("T C:"+media(new Array(skills[1], skills[3], skills[5], skills[7], skills[9])),rowOff2);
        creaCella("T L:"+media(new Array(skills[0], skills[3], skills[7], skills[9])),rowOff2);

        var rowMid = document.createElement('tr');
        creaCella("C L:"+media(new Array(skills[0], skills[1], skills[3], skills[16], skills[5], skills[9])),rowMid);
        creaCella("C C:"+media(new Array(skills[0], skills[1], skills[2], skills[3], skills[4], skills[5], skills[11], skills[12], skills[14])),rowMid);
        creaCella("",rowMid);
        var rowMid2 = document.createElement('tr');
        creaCella("",rowMid2);
        creaCella("M C:"+media(new Array(skills[2], skills[3], skills[4], skills[10], skills[12], skills[14])),rowMid2);
        creaCella("M L:"+media(new Array(skills[0], skills[3], skills[4], skills[5])),rowMid2);

        var rowDef = document.createElement('tr');
        creaCella("D L:"+media(new Array(skills[0], skills[4], skills[10], skills[12])),rowDef);
        creaCella("D C:"+media(new Array(skills[0], skills[4], skills[6], skills[8], skills[10], skills[12])),rowDef);
        creaCella("",rowDef);
        var rowDef2 = document.createElement('tr');
        creaCella("",rowDef2);
        creaCella("L:"+media(new Array(skills[4], skills[6], skills[12], skills[14], skills[16])),rowDef2);
        creaCella("",rowDef2);
        var rowPor = document.createElement('tr');
        creaCella("",rowPor);
        creaCella("P:"+media(new Array(skills[0], skills[1], skills[4], skills[6], skills[12])),rowPor);
        creaCella("",rowPor);

        rowOff.style.backgroundColor="darkgreen";
        rowOff2.style.backgroundColor="green";
        rowMid.style.backgroundColor="darkgreen";
        rowMid2.style.backgroundColor="green";
        rowDef.style.backgroundColor="darkgreen";
        rowDef2.style.backgroundColor="green";
        rowPor.style.backgroundColor="darkgreen";

        tbody.appendChild(rowOff);
        tbody.appendChild(rowOff2);
        tbody.appendChild(rowMid);
        tbody.appendChild(rowMid2);
        tbody.appendChild(rowDef);
        tbody.appendChild(rowDef2);
        tbody.appendChild(rowPor);


        ruoli.appendChild(table);

       creaDivStili("Fasce A C:"+media(new Array(skills[6], skills[8])),stili);
       creaDivStili("Fasce DMC L:"+media(new Array(skills[3], skills[7], skills[5], skills[9], skills[2], skills[16])),stili);

       creaDivStili("Lanci A CL:"+media(new Array(skills[0], skills[2], skills[6])),stili);
       creaDivStili("Lanci LDM CL:"+media(new Array(skills[7], skills[3])),stili);
       creaDivStili("Lanci P:"+media(new Array(skills[3], skills[3])),stili);

       creaDivStili("Pressing TUTTI:"+media(new Array(skills[2], skills[4], skills[16])),stili);

       creaDivStili("Contropiede AT:"+media(new Array(skills[9], skills[0], skills[3], skills[7], skills[2], skills[14], skills[16])),stili);
       creaDivStili("Contropiede C:"+media(new Array(skills[3], skills[7], skills[9], skills[16])),stili);
       creaDivStili("Contropiede P:"+media(new Array(skills[3], skills[3])),stili);

       creaDivStili("Prima MCT:"+media(new Array(skills[7], skills[3], skills[5], skills[9], skills[2])),stili);

       creaDivStili("Possesso DMC:"+media(new Array(skills[9], skills[3], skills[5])),stili);
      
       creaDivStili("Fuorigioco LD:"+media(new Array(skills[0], skills[2], skills[14], skills[16], skills[12])),stili);
       creaDivStili("Fuorigioco P:"+media(new Array(skills[4], skills[5], skills[14])),stili);

       creaDivStili("Catenaccio LDM:"+media(new Array(skills[0], skills[4])),stili);
       creaDivStili("Catenaccio P:"+media(new Array(skills[6], skills[7], skills[10])),stili);

       var scripts = framePlayer.getElementsByTagName("script");
       var ultimoScript = scripts[scripts.length-2]
       ultimoScript.parentNode.insertBefore(tool,ultimoScript);
      


    }

    function creaDivStili(testo,cella)
    {
        var div = document.createElement('div');
        div.innerHTML = "<font size=1>"+testo+"</font>";
        cella.appendChild(div)
        return div;
    }

    function creaCellaStili(testo,row)
    {
        var cell = document.createElement('td');
        cell.innerHTML = "<font size=1>"+testo+"</font>";
        row.appendChild(cell)
        return cell;
    }

    function creaCella(testo,row)
    {
        var cell = document.createElement('td');
        cell.innerHTML = "<font size=2 color=white>"+testo+"</font>";
        row.appendChild(cell)
        return cell;
    }


    function media(ski)
    {
        var somma = 0;
        for(var i = 0; i < ski.length; i++)
        {
            somma += ski[i];
        }
        var med = (somma/ski.length).toFixed(1);
        var font = "#FF0000";

    if (med < 80)
    {
        if (med < 70)
        {
            if (med < 60)
            {
                font = "#FF0000";
            }
            else
            {
                font = "#FFAA00";
            }
        }
        else
        {
            font = "#00DD00";
        }
    }
    else
    {
        font = "#0000FF";
    }
        var mediaColorata = "<font color=" + font + "> " + med + " </font>";
        return mediaColorata;
    }

    function getFrame()
    {
        var fi = document.getElementsByTagName("iframe");
        return fi[0];
    }


    function endsWith(testString, endingString)
    {
        if(endingString.length > testString.length) return false;
        return testString.indexOf(endingString) == (testString.length-endingString.length);
    }




Grazie anticipatamente :)
« Ultima modifica: 25 Settembre 2008 13:30:06 da gialloporpora »

Offline gialloporpora

  • サンドロ
  • Moderatore
  • Post: 10806
    • Il blog che non c'è
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #1 il: 16 Settembre 2008 23:02:56 »
Forse eXtenZilla è più indicato per una simile richiesta.

Comunque la console che errore ti dà ?
Hai un prototipo dell'estensione che si può provare ?
Se usi solo codice JS, magari puoi compilare l'estensione col Greasemonkey compiler.
Io non sono un esperto, magari aspetta il parere di @klades, però per i comandi di Ubiquity
non si accede al documento con l'oggetto document, ma con una cosa del genere:

Codice: [Seleziona]
vardoc=context.focusedWindow.document;
Magari è quello. Comunque, come già detto, è meglio aspetti qualcuno  che conosce bene l'argomento.
Ciao

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #2 il: 17 Settembre 2008 07:29:30 »
Forse eXtenZilla è più indicato per una simile richiesta.

Comunque la console che errore ti dà ?
che console? di firebug?

Hai un prototipo dell'estensione che si può provare ?
si, prima faccio le ultime prove e poi la uppo

Se usi solo codice JS, magari puoi compilare l'estensione col Greasemonkey compiler.
non sapevo dell'esistenza di greasmonkey, ora lo cerco. Cmq non so se potrà essermi utile dato che in locale funziona perfettamente

Io non sono un esperto, magari aspetta il parere di @klades, però per i comandi di Ubiquity
non si accede al documento con l'oggetto document, ma con una cosa del genere:

Codice: [Seleziona]
vardoc=context.focusedWindow.document;
Magari è quello. Comunque, come già detto, è meglio aspetti qualcuno  che conosce bene l'argomento.
Ciao

Ora provo a modificare.

Grazie mille delle dritte. Faccio un po' di prove e torno. Se nel frattempo qualcuno ha altre idee, sono ben accette  :D

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #3 il: 17 Settembre 2008 08:32:55 »
Non ho tempo ora di leggermi tutto, però se vuoi accedere a un frame devi usare

Codice: [Seleziona]
window.frames[n]
dove n è l'indice del frame che ti interessa.

Se invece ti interessa individuare il frame che ha il focus tra più tab, potresti utilizzare

Codice: [Seleziona]
document.commandDispatcher.focusedWindow
Dipende da quello che ti serve fare.



Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #4 il: 17 Settembre 2008 09:16:52 »
Grazie.

Però non funge nessuna delle tre soluzioni.

Ho anche installato Greasemonkey  ma non mi pare molto diverso da firebug (forse non ho capito bene come si usa)

Ho uppato la xpi ed è scaricabile da qui: http://cialtroni.altervista.org/WSM.xpi

in teoria dovrebbe aggiungere un riquadro nel primo iframe che trova.

La pagina su cui faccio la prova con firebug è questa: http://img205.imageshack.us/my.php?image=extxn0.jpg

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #5 il: 17 Settembre 2008 10:51:14 »
Non carica proprio l'overlay, infatti ottengo questi errori

Codice: [Seleziona]
No chrome package registered for chrome://wsm/content/WSMOverlay.xul
Avviso: Caricamento overlay fallito da chrome://wsm/content/WSMOverlay.xul.
File sorgente: chrome://browser/content/browser.xul

Probabilmente i file sono codificati male (devono essere in utf8).


Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #6 il: 17 Settembre 2008 11:44:38 »
Non carica proprio l'overlay, infatti ottengo questi errori

Codice: [Seleziona]
No chrome package registered for chrome://wsm/content/WSMOverlay.xul
Avviso: Caricamento overlay fallito da chrome://wsm/content/WSMOverlay.xul.
File sorgente: chrome://browser/content/browser.xul

Probabilmente i file sono codificati male (devono essere in utf8).



ok erano tutti ANSI
ora sono tutti UTF8 ma non è cambiato nulla.

versione aggiornata: http://cialtroni.altervista.org/WSM.xpi

c'è un primo alert quando entra nella funzione getframe
poi uno prima di uscire che restituisce il numero di IFRAME che ha trovato
poi dovrebbe essercene un altro ma questo non viene visualizzato.
Ovviamente perchè il secondo alerto restituisce zero.

Idee?

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #7 il: 17 Settembre 2008 11:52:00 »
risolto.

l'istruzione giusta era la seguente:

Codice: [Seleziona]
var fi = content.document.getElementsByTagName("iframe");
invece che :

Codice: [Seleziona]
var fi = document.getElementsByTagName("iframe");
grazie ad entrambi per l'aiuto  :)

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #8 il: 17 Settembre 2008 21:54:22 »
ok sono di nuovo qui.
Dopo che ho trovato la risposta sono andato avanti sperando di poter concludere da solo ma purtroppo sono incappato in un altro poblema.
Nell'altro forum (Quello consigliato da gialloporpora) mi hanno chiuso il thread e cmq nessuno aveva risposto.
Dicevo cmq che la mia estensione ancora non funziona. Non riesco a far visualizzare il testo nelle colonne e righe delle tabelle che ho creato.

Qui c'è di nuovo quello che dovrebbe essere
http://img205.imageshack.us/my.php?image=extxn0.jpg
E qui quello che mi esce fuori adeso.
http://img98.imageshack.us/my.php?image=71076975tx1.jpg

Penso che il metodo appendChild non funzioni perfettamente ma non capisco il perchè (e due ^_^' )
Ho anche provato ad usare al suo posto il metodo insertChild ma senza fortuna.

Riuppo la xpi.
Se la debuggate con qualche programma mi dite come fate?  :D

http://cialtroni.altervista.org/WSM.xpi

Offline Godai71

  • Moderatore
  • Post: 4153
    • The Walking Shadow
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #9 il: 17 Settembre 2008 22:04:49 »
Ti ho chiuso il topic perché hai scritto che avevi risolto e SOPRATUTTO per non disperdere le risposte

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #10 il: 17 Settembre 2008 22:18:27 »
Ti ho chiuso il topic perché hai scritto che avevi risolto e SOPRATUTTO per non disperdere le risposte
Non era un'accusa. Era una discolpa nell'aver ri-postato qui invece che su un forum che dovrebbe essere più adatto a certi tipi di cose.

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #11 il: 19 Settembre 2008 17:37:57 »
niente?

Offline Ryozzo

  • Post: 9
Re: Problemi con FF3. getElementsByTagName non trova l'iframe
« Risposta #12 il: 22 Settembre 2008 07:12:46 »
si può chiudere, ho risolto mettendo ovunque content.document.

grazie comunque

0 Utenti e 1 Visitatore stanno visualizzando questo topic.