Sommario
Gli script offrono agli autori un mezzo per estendere i documenti HTML in modi altamente attivi e interattivi. Ad esempio:
Vi sono due tipi di script che gli autori possono allegare ad un documento HTML:
Nota. Queste specifiche includono informazioni più dettagliate circa gli script nelle sezioni sulle macro di script.
Le seguenti sezioni discutono temi che riguardano i programmi utente che supportano i linguaggi di script.
<!ELEMENT SCRIPT - - %Script; -- dichiarazioni di script --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- codifica del carattere di risorsa collegata -- type %ContentType; #REQUIRED -- tipo di contenuto del linguaggio di script -- src %URI; #IMPLIED -- URI per uno script esterno -- defer (defer) #IMPLIED -- I PU possono differire l'esecuzione di script -- >
Marcatore iniziale: obbligatorio, Marcatore finale: obbligatorio
Definizioni di attributo
Attributi definiti altrove
L'elemento SCRIPT inserisce uno script all'interno di un elemento. Questo elemento può comparire un qualsiasi numero di volte nel HEAD o nel BODY di un documento HTML.
Lo script può essere definito all'interno del contenuto dell'elemento SCRIPT o in un file esterno. Se l'attributo src non è impostato, i programmi utente devono interpretare come script il contenuto dell'elemento . Se l'attributo src ha il valore di un URI, i programmi utente devono ignorare il contenuto dell'elemento e recuperare lo script tramite l'URI. Si noti che l'attributo charset fa riferimento alla codifica dei caratteri dello script designato dall'attributo src; esso non riguarda il contenuto dell'elemento SCRIPT.
Gli script sono analizzati da motori di script che devono essere noti al programma utente.
La sintassi dei dati di script dipende dal linguaggio di script.
Dal momento che l'HTML non fa assegnamento su uno specifico linguaggio di script, gli autori di documenti devono comunicare esplicitamente ai programmi utente il linguaggio di ciascuno script. Ciò può essere fatto sia attraverso una dichiarazione di base sia attraverso una dichiarazione locale.
Gli autori dovrebbero specificare il lingauggio di script per tutti gli script in un documento includendo la seguente dichiarazione META all'interno di HEAD:
<META http-equiv="Content-Script-Type" content="tipo">
dove "tipo" è un tipo di contenuto che denomina il linguaggio di script. Esempi di valori comprendono "text/tcl", "text/javascript", "text/vbscript".
In mancanza di una dichiarazione META, il linguaggio predefinito può essere impostato tramite un'intestazione HTTP "Content-Script-Type".
Content-Script-Type: tipo
dove "tipo" è di nuovo un tipo di contenuto che denomina il linguaggio di script.
I programmi utente dovrebbero determinare il linguaggio di script predefinito per un documento in base ai seguenti passi (dalla priorità maggiore alla minore):
Documenti che non specificano informazioni sul linguaggio di script predefinito, e che contengono elementi che definiscono uno script per eventi intrinseci, sono scorretti. I programmi utente possono tuttavia cercare di interpretare gli script non correttamente specificati, ma non sono obbligati a farlo. Gli strumenti autoriali dovrebbero generare informazioni sul linguaggio di script predefinito, per aiutare gli autori ad evitare di creare documenti scorretti.
L'attributo type deve essere specificato per ciascuna istanza dell'elemento SCRIPT in un documento. Il valore dell'attributo type per un elemento SCRIPT sovrascrive il linguaggio di script predefinito per quell'elemento.
In questo esempio, dichiariamo che il linguaggio di script predefinito è "text/tcl". Includiamo un elemento SCRIPT nell'intestazione, il cui script si trova in un file esterno ed è nel linguaggio di script "text/vbscript". Includiamo anche uno SCRIPT nel corpo del documento, che contiene il suo proprio script, scritto in "text/javascript".
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <TITLE>Un documento con SCRIPT</TITLE> <META http-equiv="Content-Script-Type" content="text/tcl"> <SCRIPT type="text/vbscript" src="http://unposto.com/progr/vbcalc"> </SCRIPT> </HEAD> <BODY> <SCRIPT type="text/javascript"> ...un JavaScript... </SCRIPT> </BODY> </HTML>
Ciascun linguaggio di script possiede le proprie convenzioni per riferirsi ad oggetti HTML dall'interno di uno script. Queste specifiche non definiscono un meccanismo standard per far riferimento ad oggetti HTML.
Tuttavia, gli script dovrebbero riferirsi ad un elemento in base al nome che gli è stato assegnato. I motori di script dovrebbero osservare le seguenti regole di precedenza nell'identificare un elemento: un attributo name ha la precedenza su un attributo id se entrambi sono stati impostati. In caso contrario, può essere usato o l'uno o l'altro.
Nota. Si informano gli autori che è possibile che si verifichino cambiamenti nel campo degli eventi intrinseci (ad es., nel modo in cui gli script sono collegati ad eventi). Le ricerche in questo campo sono portate avanti dal W3C Document Object Model Working Group (si consulti per maggiori informazioni il sito Web del W3C presso http://www.w3.org/).
Definizioni di attributo
È possibile associare un'azione con un certo numero di eventi che accadono quando un utente interagisce con un programma utente. Ciascuno degli "eventi intrinseci" sopra elencati assume un valore che è uno script. Lo script è eseguito tutte le volte che l'evento si verifica per quell'elemento. La sintassi dei dati di script dipende dal linguaggio di script.
Elementi di controllo quali INPUT, SELECT, BUTTON, TEXTAREA e LABEL rispondono tutti a certi eventi intrinseci. Quando questi elementi non compaiono all'interno di un modulo, possono essere usati per potenziare l'interfaccia utente grafica del documento.
Ad esempio, è possibile che gli autori vogliano includere nei loro documenti dei pulsanti di comando che non inoltrano un modulo, ma che tuttavia comunicano con un server quando sono attivati.
Gli esempi successivi mostrano possibili comportamenti di controlli ed interfaccia utente, basati su eventi intrinseci.
Nell'esempio seguente, NomeUtente è un campo di testo obbligatorio. Quando un utente tenta di abbandonare il campo, l'evento onblur richiama una funzione JavaScript, per confermare che NomeUtente abbia un valore accettabile.
<INPUT NAME="NomeUtente" onblur="validoNomeUtente(this.value)">
Ecco un altro esempio di JavaScript:
<INPUT NAME="num" onchange="if (!checkNum(this.value, 1, 10)) {this.focus();this.select();} else {grazie()}" VALUE="0">
Ecco un esempio di VBScript per un gestore di eventi applicato ad un campo di testo:
<INPUT name="modifica1" size="50"> <SCRIPT type="text/vbscript"> Sub modifica1_cambiato() If modifica1.value = "abc" Then pulsante1.enabled = True Else pulsante1.enabled = False End If End Sub </SCRIPT>
Ed ecco lo stesso esempio usando Tcl:
<INPUT name="modifica1" size="50"> <SCRIPT type="text/tcl"> proc modifica1_cambiato {} { if {[modifica1 value] == abc} { pulsante1 enable 1 } else { pulsante1 enable 0 } } modifica1 onChange modifica1_cambiato </SCRIPT>
Ecco qui un esempio di Javascript per collegare un evento al contenuto di uno script. Innanzitutto ecco un semplice gestore di clic:
<BUTTON type="button" name="miopulsante" value="10"> <SCRIPT type="text/javascript"> function mio_onclick() { . . . } document.form.miopulsante.onclick = mio_onclick </SCRIPT> </BUTTON>
Ed ora un più interessante gestore di finestre:
<SCRIPT type="text/javascript"> function mio_onload() { . . . } var fin = window.open("qualcosa/altro/URI") if (fin) fin.onload = mio_onload </SCRIPT>
In Tcl ciò appare come:
<SCRIPT type="text/tcl"> proc mio_onload {} { . . . } set fin [window open "qulacosa/altro/URI"] if {$fin != ""} { $fin onload mio_onload } </SCRIPT>
Si noti che "document.write" o istruzioni equivalenti, nei gestori di eventi intrinseci, creano e scrivono un nuovo documento, piuttosto che modificare quello corrente.
La modifica dinamica di un documento può essere illustrata nel modo seguente:
I documenti HTML sono obbligati a mantenere la conformità alla DTD HTML sia prima sia dopo l'elaborazione di ciascun elemento SCRIPT.
L'esempio successivo mostra come uno script può modificare dinamicamente un documento. Il seguente script:
<TITLE>Documento di prova</TITLE> <SCRIPT type="text/javascript"> document.write("<p><b>Ciao Mondo!<\/b>") </SCRIPT>
Produce il medesimo effetto di questo codice HTML:
<TITLE>Documento di prova</TITLE> <P><B>Ciao Mondo!</B>
Le seguenti sezioni discutono come gli autori possono creare documenti che funzionano con programmi utente che non supportano linguaggi di script.
<!ELEMENT NOSCRIPT - - (%block;)+ -- contenitore di contenuto alternativo per riproduzione non basata su script --> <!ATTLIST NOSCRIPT %attrs; -- %coreattrs, %i18n, %events -- >
Marcatore iniziale: obbligatorio, Marcatore finale: obbligatorio
L'elemento NOSCRIPT permette agli autori di fornire un contenuto alternativo, quando uno script non è eseguito. Il contenuto dell'elemento NOSCRIPT dovrebbe essere riprodotto da un programma utente attrezzato per gestire script nei seguenti casi:I programmi utente che non supportano gli script sul lato cliente devono riprodurre il contenuto di questo elemento.
Nell'esempio seguente, un programma utente che esegue lo SCRIPT includerà nel documento certi dati creati dinamicamente. Se il programma utente non supporta script, l'utente può comunque recuperare i dati attraverso un collegamento.
<SCRIPT type="text/tcl"> ...uno script Tcl per inserire dati... </SCRIPT> <NOSCRIPT> <P>Accedi ai <A href="http://uncertoposto.com/dati">dati.</A> </NOSCRIPT>
I programmi utente che non riconoscono l'elemento SCRIPT riprodurranno verosimilmente il contenuto di quell'elemento come testo. Alcuni motori di script, includendo quelli per i linguaggi JavaScript, VBScript e Tcl, consentono che le istruzioni di script siano racchiuse all'interno di un commento SGML. Pertanto i programmi utente che non riconoscono l'elemento SCRIPT ignoreranno il commento, mentre i motori di script intelligenti comprenderanno che lo script racchiuso nel commento dovrebbe essere eseguito.
Un'altra soluzione al problema è di mantenere gli script in documenti esterni e di riferirsi ad essi tramite l'attributo src.
Commentare gli script in JavaScript
Il motore JavaScript consente che la stringa "<!--" si trovi all'inizio di un
elemento SCRIPT ed ignora ulteriori caratteri fino alla fine della riga. JavaScript
interpreta "//" come l'inizio di un commento che si estende fino alla fine della
riga corrente. Ciò serve per nascondere la stringa "-->" all'analizzatore
Javascript.
<SCRIPT type="text/javascript"> <!-- per nascondere il contenuto dello script ai vecchi browser function square(i) { document.write("La chiamata ha passato ", i ," alla funzione.","<BR>") return i * i } document.write("La funzione ha restituito ",square(5),".") // termina di nascondere il contenuto ai vecchi browser --> </SCRIPT>
Commentare gli script in VBScript
In VBScript un singolo carattere virgoletta fa sì che il resto della riga corrente sia
trattato come un commento. Può perciò essere usato per nascondere la stringa "-->" al
VBScript; per esempio:
<SCRIPT type="text/vbscript"> <!-- Sub pippo() ... End Sub ' --> </SCRIPT>
Commentare script in TCL
In Tcl il carattere "#" trasforma in commento il resto della riga:
<SCRIPT type="text/tcl"> <!-- per nasconderfe il contenuto dello script ai vecchi browser proc square {i} { document write "La chiamata ha passato $i alla funzione.<BR>" return [expr $i * $i] } document write "La funzione ha restituito [square 5]." # termina di nascondere il contenuto ai vecchi browser --> </SCRIPT>
Nota. Alcuni browser chiudono i commenti alla prima occorrenza del carattere ">"; così, per nascondere il contenuto dello script a tali browser, è possibile trasporre gli operandi per gli operatori relazionali e di traslazione (es.: usare "y < x" piuttosto che "x > y") oppure adoperare caratteri di fuga dipendenti dal linguaggio di script per ">".