Funzione javascript per tracciare i programmi (magari può servire)
Ho apportato alcune modifiche ad una funzione trovata in rete che visualizzava dei messaggi non usando alert ma la stessa finestra che la usava.
Prima variazione: Visualizzare di tutti i messaggi su di una nuova finestra.
Seconda variazione: Possibilità di indentare i messaggi.
Terza variazione: Possibilità di tracciare i messaggi solo per un certo tipo di codice.
Inclusione delle funzioni Trace e set_Trace
Nella sezione <head> inserire <script src="trace.js"></script> (eventualmente modificare il path di src)
set_Trace(par1)
par1 = "js" - Traccia solo le funzioni Trace che hanno questo valore come terzo parametro.
"html" - Traccia solo le funzioni Trace che hanno questo valore come terzo parametro.
"all" - Traccia tutte funzioni Trace.
"none" - Non traccia.
Trace(par1,par2,par3)
par3 = "js" "html" "all" "none"
par1 = Messaggio da visualizzare. Se la funzione è usata per debuggare del codice javascript si può
comporlo ovviamente con le variabili da controllare. In html la funzione può essere usata
per vedere l'ordine di esecuzione dei tag inserendo <script>Trace(par1,par2,'html')</script>
par2 = "+" "-" "0"
Il + ed il -, nelle mie intenzioni, devono essere usati per tracciare l'entrata e l'uscita nelle routines.
Es: Routine1() { Trace("Routine1","+",'js'); istruzioni javascript; Trace("Routine1","-",'js');}
Le due chiamate comportano la visualizzazione di -->Routine e <--Routine. Inoltre il +
incrementerà il livello di indentazione dei prossimi messaggi mentre il - lo diminuirà.
"0"
Lascia inalterata l'indentazione dei prossimi messaggi da visualizzare.
Riassumendo estendendo l'esempio precedente
Routine1()
{
var prova = 10;
Trace("Routine1","+",'js');
Trace("Prova = "+prova,"0",'js');
Routine2();
Trace("Quello che mi pare","0",'js');
Trace("Routine1","-",'js');
}
Routine2()
{
var prova = 20;
Trace("Routine2","+",'js');
Trace("Prova = "+prova,"0",'js');
Trace("Quello che voglio","0",'js');
Trace("Routine2","-",'js');
}
comporterà sulla nuova finestra la seguente messaggistica:
-->Routine1
Prova = 10
-->Routine2
Prova = 20
Quello che voglio
<--Routine2
Quello che mi pare
<--Routine1[/FONT]
P.S. Provato con Mozilla e Chrome. Ho dei problemi con IE
Questo è il codice di Trace.js
var tipo_Trace = "all";
var livello = 0;
var stringa_livello = " "; // Numero sufficiente di spazi per permettere l'indentazione
stringa_livello += " "; // Ogni indentazione prende 3 spazi
var finestra_Trace = null;
var indentazione = 3;
if (!finestra_Trace)
{
var w = 820;
var h = 300;
var l = Math.floor((screen.width-w)/2);
var t = Math.floor((screen.height-h)/2);
var parametri = "width="+w+",height="+h+",top=" + t + ",left=" + l + ",menubar=no,toolbar=no,scrollbars=yes,location=no ,status=no,resizable=no"
finestra_Trace = window.open("","_blank",parametri);
finestra_Trace.document.write("<html>\n");
finestra_Trace.document.write(" <head>\n");
finestra_Trace.document.write(" <title>Trace</title>\n");
finestra_Trace.document.write(" </head>\n");
finestra_Trace.document.write("</html>");
}
function set_Trace(tipo)
{
switch (tipo)
{
case 'all':
case 'html':
case 'js' : tipo_Trace = tipo; break;
case 'none': tipo_Trace = tipo; finestra_Trace.close(); break;
default: alert('set_trace tipo errato'); break;
}
}
/**
* Questa funzione mostra messaggi di Traceging come semplice testo nella finestra
* appena creata.
**/
function Trace(msg,indent,tipo)
{
// Se non è stata ancora creata una finestra nella quale visualizzare
// i messaggi di Trace, lo si fa ora.
if (tipo_Trace == "all" || tipo_Trace == tipo)
{
if (!Trace.box)
{
// Crea un nuovo elemento <div>
Trace.box = finestra_Trace.document.createElement("div");
// Specifica l'aspetto utilizzando attributi di stile CSS
Trace.box.setAttribute("style",
"line-height: 0em;" +
"background-color:white; " +
"font-family:'Courier New', Courier, monospace; " +
"font-size:11px; " +
"padding: 0px;");
// Accoda il nuovo elemento <div> alla fine del documento
finestra_Trace.document.body.appendChild(Trace.box );
}
// Quando si arriva qui, Trace.box si riferisce a un elemento <div> nel quale
// si possono inserire i messaggi di Trace.
// Prima si crea un nodo <pre> per contenere il messaggio.
var pre = finestra_Trace.document.createElement("pre");
// Ora si crea un nodo di testo che contiene il messaggio, e lo si aggiunge a <pre>
switch (indent)
{
case "+": msg = stringa_livello.substring(0,livello * indentazione)+"-->"+msg; livello += 1; break;
case "-": livello -= 1; msg = stringa_livello.substring(0,livello * indentazione)+"<--"+msg; break;
default : msg = stringa_livello.substring(0,livello * indentazione)+msg; break;
}
pre.appendChild(finestra_Trace.document.createText Node(msg));
// E si accoda il nodo <pre> al nodo <div> che contiene l'output di Trace
Trace.box.appendChild(pre);
}
}
Ultima modifica di radiolanversilia : 30-01-2014 alle ore 16.42.35Motivo: La variabile stringa_livello sembra vuota. Non deve esserlo!