Visualizzazione risultati 1 fino 5 di 5

Discussione: Un mio script per Firefox non funziona: perché?

  1. #1
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito Un mio script per Firefox non funziona: perché?

    Mi aiutate a capire perché questo mio script (sviluppato da me per un'estensione per Firefox) non funziona? Di seguito il codice:
    Codice PHP:
    function SearchNote_wizardStep2 ()
    {
    var
    wcd = window.content.document;
    var
    forms = wcd.getElementsByTagName("form");
    alert ('Elementi trovati: ' + forms.length);
    for (var
    i = 0; forms[i]; i++)
    {
    var
    hlNode = wcd.createElement ('span');
    hlNode.setAttribute('style', 'background-color:#FF0');
    var
    nextNode = forms[i].nextSibling;
    alert ('nextNode = ' + nextNode);
    if (
    nextNode)
    wcd.insertBefore(hlNode, nextNode);
    else
    forms[i].parentNode.appendChild(hlNode);
    hlNode.appendChild(forms[i]);
    }
    alert ('ciclo completo: vedi i form evidenziati?');
    document.getElementById('searchnote-wizard-deck').selectedIndex = 1;
    alert ('fine dello script raggiunta');
    }
    L'obiettivo di questa funzione sarebbe quello di evidenziare i FORM presenti sulla pagina caricata in Firefox, aggiungendo un tag <span style="background-color:#FF0"> ... </span>. Grazie agli "alert" che ho posizionato, vi posso dire che:
    - se i form esistono (il test l'ho fatto sulla home page di Google), questi vengono correttamente trovati (forms.length in questo caso vale 1)
    - il nodo hlNode è correttamente creato
    - nel caso di Google viene trovato un nodo (penso sia un <br>) successivo al form
    - lo script si blocca alla riga wcd.insertBefore(hlNode, nextNode); (che dovrebbe inserire lo span, ancora vuoto, nella pagina dopo il modulo stesso): l'errore che Firefox mi segnala è... "Node not found" (?!?).

    Come posso fare per risolvere il problema?

    Grazie a chi risponde... statemi bene...
    Ultima modifica di dreadnaut : 25-09-2008 alle ore 15.56.29 Motivo: php non e', ma si legge meglio ;-)
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  2. #2
    Guest

    Predefinito

    Non ci hai detto se nextNode è correttamente inizializzato e cosa contiene.
    Prova, inoltre, a mettere un alert all'interno della if (nextNode) prima del comando insertBefore, in modo tale da vedere se almeno in quella if entra o meno (e cosa contengono nextNode e hlNode)


    ciao!

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    @debug: ehm... nextNode e' riempito nel ciclo...

    l'ordine dei parametri corretto per insertBefore() e'
    Codice PHP:
    padre.insertBefore(nuovo, figlio)
    quindi non dovresti chiamarlo per wcd ma per forms[ i ].parentNode, come fai anche per appendChild

    Ocio pero' ad alcuni particolari:
    • stai inserendo uno span, invece di un div - questo vuol dire che non avra' display: inline invece di display: block, e questo puo' avere effetti sgradevoli
    • stai inserendo un nuovo elemento nella pagina, quindi questo elemento subira' tutte le esistenti regole css della pagina stessa. Se lo stile degli span li posiziona absolute in (0,0), il risultato non sara' gradevole.


    non sarebbe piu' semplice cambiare il colore di sfondo del form stesso, e per sicurezza di tutti i fieldset in esso contenuti (casomai tutti gli element siano float-ati, e il contenitore form abbia quindi altezza zero.
    Ultima modifica di dreadnaut : 25-09-2008 alle ore 16.09.32

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    @debug: ehm... nextNode e' riempito nel ciclo...
    ok, non lo avevo visto, ma non ci ha detto se è valorizzato correttamente ;)


    ciao!

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Lo script aggiornato, seguendo le indicazioni di dreadnaut:
    Codice:
    function SearchNote_wizardStep2 ()
    {
    	var wcd = window.content.document;
    	var forms = wcd.getElementsByTagName("form");
    	alert ('Elementi trovati: ' + forms.length);
    	for (var i = 0; forms[i]; i++)
    	{
    		var hlNode = wcd.createElement ('div');
    		hlNode.setAttribute('style', 'background-color:#FF0');
    		var nextNode = forms[i].nextSibling;
    		alert ('nextNode = ' + nextNode);
    		if (nextNode)
    		{
    			alert ('nextNode valido');
    			forms[i].parentNode.insertBefore(hlNode, nextNode);
    		}
    		else
    		{
    			alert ('nextNode non valido');
    			forms[i].parentNode.appendChild(hlNode);
    		}
    		forms[i].parentNode.removeChild (forms[i]);
    		hlNode.appendChild(forms[i]);			
    	}
    	alert ('ciclo completo: vedi i form evidenziati?');
    	document.getElementById('searchnote-wizard-deck').selectedIndex = 1;
    	alert ('fine dello script raggiunta');
    }
    Ora lo script funziona più o meno correttamente... L'idea del DIV supplementare è giustificata dal fatto che oltre allo sfondo dovrei aggiungere altri controlli (il vero obiettivo dello script sarebbe quello di evidenziare i moduli per permettere di selezionarli negli step successivi della configurazione dell'estensione... ci avete capito qualcosa? :-D).

    Vabbon, per adesso il problema è risolto... se ce ne saranno altri posterò di nuovo qui.

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •