Java Script
Java Script
linguaggio di programmazione
interpretato orientato agli oggetti
JavaScript
linguaggio di programmazione
Descrizione
Il cambio di nome da LiveScript a JavaScript si ebbe più o meno nel periodo in cui Netscape
stava includendo il supporto per la tecnologia Java nel suo browser Netscape Navigator.[2] La
scelta del nome si rivelò fonte di grande confusione. Non c'è una vera relazione tra Java e
JavaScript; le loro somiglianze sono soprattutto nella sintassi (derivata in entrambi i casi dal
linguaggio C); le loro semantiche sono piuttosto diverse, e in particolare i loro object model
non hanno relazione e sono notevolmente incompatibili.
Dato il successo di JavaScript come linguaggio per arricchire le pagine web, Microsoft
sviluppò un linguaggio compatibile, conosciuto come JScript. La necessità di specifiche
comuni fu alla base dello standard ECMA 262 per ECMAScript, di cui sono state pubblicate
otto edizioni da quando il lavoro iniziò, nel novembre 1996[1].
Aspetti strutturali
Altri aspetti di interesse: in JavaScript lato client, il codice viene eseguito direttamente sul
client e non sul server. Il vantaggio di questo approccio è che, anche con la presenza di script
particolarmente complessi, il web server non rischia sovraccarichi dato che il lavoro viene
svolto dal client. Un rovescio della medaglia è che, nel caso di script particolarmente grandi, il
tempo per il trasferimento dalla rete può diventare eccessivamente lungo. Inoltre ogni
informazione che presuppone un accesso a dati memorizzati in una base di dati remota deve
essere rimandata a un linguaggio che effettui materialmente la transazione, per poi restituire
i risultati ad una o più variabili JavaScript; operazioni del genere richiedono un nuovo
caricamento della pagina stessa. Questi limiti sono però stati superati in buona parte con la
nascita di AJAX.
Può valutare le espressioni regolari (introdotte nella versione 1.2; supporto da parte dei
browser: a partire da Netscape Navigator 4 e Internet Explorer 4)
Incompatibilità
Le varie implementazioni di JavaScript, come già accaduto per HTML, spesso non sono
conformi agli standard, ma piuttosto sono costruite per funzionare con uno specifico
browser web e con un insieme di versioni specifiche degli stessi. L'attuale standard
ECMAScript dovrebbe essere teoricamente la base di tutte le implementazioni JavaScript,
ma in pratica i browser Mozilla (e Netscape) usano JavaScript, Microsoft Internet Explorer
usa JScript, e altri browser come Opera e Safari usano altre implementazioni ECMAScript,
spesso con ulteriori caratteristiche non standard per permettere la compatibilità con
JavaScript e JScript.
JavaScript e JScript contengono molte caratteristiche che non sono parte dello standard
ufficiale ECMAScript, e possono anche essere privi di diverse caratteristiche. In tal modo,
sono in parte incompatibili, il che porta gli autori di script a dovere sopperire a tali problemi
durante la scrittura del software. Tra i due, JavaScript è più conforme allo standard: ciò
significa che uno script redatto secondo gli standard ECMA funzionerà con la maggior parte
dei browser, soprattutto se in versioni recenti.
Un altro effetto è che ciascun browser potrebbe trattare lo stesso script in modo diverso, e
ciò che funziona in un browser potrebbe non funzionare in un altro, o in una diversa versione
dello stesso browser. Come con l'HTML, è quindi raccomandabile scrivere codice conforme
agli standard. Naturalmente negli anni sono state realizzate varie librerie e framework che
possono essere usate per semplificare la scrittura di codice JavaScript che funzioni
correttamente indipendentemente dal browser usato. Una delle librerie più conosciute e
diffuse per semplificare la scrittura di semplici script all'interno di pagine HTML o PHP è
jQuery, mentre esistono numerosi framework per scrivere applicativi in JavaScript anche
estremamente sofisticati (lato client e/o lato server) ignorando del tutto la necessità di
dovere riconoscere quale browser utilizzerà l'utente finale.
Contromisure
Esistono due tecniche principali per gestire le incompatibilità: browser sniffing (letteralmente
"annusare il browser") e object detection ("rilevazione dell'oggetto"). Quando esistevano solo
due browser che supportavano lo scripting, ovvero Netscape e Internet Explorer, il browser
sniffing era la tecnica più diffusa. Controllando un certo numero di proprietà del client, che
restituivano informazioni su piattaforma, browser e versione, era possibile per il codice
discernere esattamente in quale browser veniva eseguito. in seguito le tecniche di sniffing
divennero più difficili da implementare, dato che Internet Explorer cominciò a dissimulare le
proprie informazioni, per esempio fornendo informazioni sul browser sempre più inaccurate
(i motivi per questo comportamento della Microsoft sono da tempo oggetto di disputa). Più
tardi ancora, il browser sniffing divenne una sorta di complicata forma d'arte, quando cioè
altri browser dotati di scripting entrarono nel mercato, ciascuno con proprie informazioni su
piattaforma, client e versione.
if (document.images)
Oggi, una combinazione di browser sniffing, object detection, e conformità agli standard
come le specifiche ECMAScript e i CSS sono usati in varie misure per provare ad assicurare
che un utente non incontri mai un errore JavaScript.
Uso
L'idea di base è che il programma ospite (quello che ospita ed esegue lo script) fornisca allo
script un'API ben definita, che consente l'accesso ad operazioni specifiche, la cui
implementazione è a carico del programma ospite stesso. Lo script, quando eseguito, utilizza
riferimenti a questa API per richiedere (al programma ospite) l'esecuzione di operazioni
specifiche, non previste dai costrutti del linguaggio JavaScript in sé. Tale meccanismo viene
adottato anche in linguaggi quale il C o Java, nel quale il programma si affida a delle librerie,
non previste dal linguaggio in sé, che permettono di effettuare operazioni quali l'I/O o
l'esecuzione di chiamate a funzioni di sistema.
L'esempio tipico (e, forse, il più noto e comune) di programma ospite per uno script JavaScript
è quello del browser. Un browser moderno incorpora normalmente un interprete JavaScript.
Quando viene visitata una pagina web che contiene codice JavaScript, quest'ultimo viene
eseguito dall'interprete contenuto nel browser. Le interfacce che consentono a JavaScript di
rapportarsi con un browser sono chiamate DOM (Document Object Model in italiano Modello
a Oggetti del Documento). Molti siti web usano la tecnologia JavaScript lato client per creare
potenti applicazioni web dinamiche.
Un uso principale del JavaScript in ambito Web è la scrittura di piccole funzioni integrate
nelle pagine HTML che interagiscono con il DOM del browser per compiere determinate
azioni non possibili con il solo HTML statico: controllare i valori nei campi di input,
nascondere o visualizzare determinati elementi, ecc. Sfortunatamente, gli standard DOM
imposti dal W3C non sempre vengono rispettati in modo consistente ed omogeneo da tutti.
Browser diversi, a seconda del loro motore di rendering, espongono diversi oggetti o metodi
allo script, perciò spesso è necessario implementare controlli aggiuntivi ad una funzione
JavaScript, per garantirne la compatibilità con ciascun browser e persino in funzione delle
varie versioni del medesimo browser.
Al di fuori del Web, interpreti JavaScript sono integrati in diverse applicazioni. Adobe Acrobat
e Adobe Reader supportano JavaScript nei file PDF. La piattaforma Mozilla, che è alla base di
molti diffusi browser Web, usa JavaScript per implementare l'interfaccia utente e la logica di
transazione dei suoi vari prodotti. Gli interpreti JavaScript sono integrati anche nelle
applicazioni proprietarie prive di interfacce programmabili via script. Infine la tecnologia
Windows Script Host di Microsoft supporta JavaScript (via JScript), un linguaggio di scripting
per i sistemi operativi.
KJS
Rhino
SpiderMonkey
Narcissus
NJS
NGS
Resin
FESI
SEE
DMDScript
V8
JägerMonkey
Chakra
Utilizzo in HTML
Per inserire uno script in una pagina HTML, è necessario l'utilizzo del tag script. Questo tag
non è parte del linguaggio JavaScript in sé, serve solo come "contenitore" all'interno di una
pagina HTML.
<script type="text/javascript">
// <![CDATA[
JavaScript statements...
// ]]>
</script>
Un documento può presentare in più parti la definizione del tag script. Tramite questo tag si
può rappresentare la versione utilizzata e a seconda del browser si avrà l'interpretazione
della parte di codice appropriata. Le definizioni possono essere le seguenti:
Il seguente esempio visualizza un messaggio di avviso con all'interno scritto "Hello world".
<script type="text/javascript">
alert('Hello world');
</script>
<script type="text/javascript">
document.write('Hello world');
</script>
Per integrare del codice JavaScript in un documento HTML, bisogna farlo precedere da:
<script type="text/javascript">
e seguire da:
</script>
<!--
e finisca con:
// -->
</script>
I segnalatori di commento <!-- ... --> sono necessari per assicurare che il codice non
venga visualizzato come testo da browser molto vecchi che non riconoscono il tag
<script> nei documenti HTML, mentre LANGUAGE è un attributo HTML (il cui uso è
ormai sconsigliato) che può essere richiesto da vecchi browser. Comunque, i tag <script> nei
documenti XHTML/XML non funzionano se commentati, dato che i parser conformi agli
standard XHTML/XML ignorano i commenti e possono anche incontrare problemi con i
simboli -- , < e > negli script (per esempio, confondendoli con gli operatori di
decremento degli interi e di confronto). I documenti XHTML dovrebbero quindi includere gli
script come sezioni CDATA dell'XML, facendoli precedere da
<script type="text/javascript">
//<![CDATA[
e facendoli seguire da
//]]>
</script>
(I simboli '//' all'inizio di una linea segnalano l'inizio di un commento JavaScript, per impedire
che <![CDATA[ e ]]> vengano analizzati dallo script.)
JavaScript può essere usato per ogni aspetto dello scripting lato client di un web browser, ma
alcuni usi si sono diffusi più di altri. Tra gli esempi ricorrenti vi sono la sostituzione di
immagini, la creazione di finestre pop-up e la convalida dei dati inseriti in form. Nella maggior
parte dei browser, il seguente frammento di codice XHTML mostra un modo con cui
un'immagine può essere sostituita con un'altra quando l'utente muove il cursore su di essa.
Tale effetto è chiamato spesso rollover o mouse over. Comunque comportamenti simili
possono essere ottenuti anche usando solo i CSS (http://www.wellstyled.com/css-nopreload
-rollovers.html) .
onclick =
"window.location.href='http://en.wikipedia.org/'"
onmouseover = "this.src='rollover.png'"
Filiazioni
JavaScript for OSA (JavaScript OSA, or JSOSA), è un linguaggio di scripting per Macintosh
basato sull'implementazione JavaScript 1.5 di Mozilla[7]. È un componente freeware reso
disponibile da Late Night Software (http://www.latenightsw.com/) . L'interazione con il
sistema operativo e con le applicazioni di terze parti è gestita tramite un oggetto MacOS. A
parte ciò, il linguaggio è virtualmente identico all'implementazione Mozilla. È stato proposto
come alternativa al più usato linguaggio AppleScript.
Variabili
Oggetti
Ogni cosa in JavaScript è o un valore primitivo o un oggetto. Gli oggetti sono entità dotate di
unicità (sono uguali solo a sé stessi) e che associano nomi di proprietà a valori.
Ciò significa
che un oggetto è un vettore associativo simile agli hash in Perl e Ruby, o ai dizionari in
Python, PostScript e Smalltalk.
JavaScript ha diversi generi di oggetti predefiniti, in particolare Array, Boolean (booleani), Date
(oggetti contenenti una data e un'ora), Function (funzioni), Math (oggetto contenente funzioni
di uso nel calcolo matematico), Number (numeri), Object (oggetti), RegExp (espressioni
regolari) e String (stringhe). Altri oggetti sono gli "oggetti ospiti", definiti non dal linguaggio
ma dall'ambiente di esecuzione. In un browser, i tipici oggetti ospite appartengono al DOM:
window (finestra), form (maschera), link (collegamento) ecc.
Definendo un costruttore, è possibile definire oggetti. JavaScript è un linguaggio orientato a
oggetti basato su prototipi. Ciò significa che l'eredità è fra oggetti, non fra classi (JavaScript
non ha classi). Gli oggetti ereditano le proprietà dai loro prototipi.
Si possono aggiungere ulteriori proprietà o metodi ai singoli oggetti dopo che sono stati
creati. Per far questo per tutte le istanze create da un singolo costruttore, si può usare la
proprietà prototype del costruttore per accedere all'oggetto prototipo.
// costruttore
this.attributeA = attributeA
this.attributeB = attributeB
// crea un Oggetto
alert(obj["attributeA"])
Simulare l'ereditarietà
function Base()
this.Override = _Override;
this.BaseFunction = _BaseFunction;
function _Override()
alert("Base::Override()");
function _BaseFunction()
alert("Base::BaseFunction()");
function Derive()
this.Override = _Override;
function _Override()
alert("Derive::Override()");
d = new Derive();
d.Override();
d.BaseFunction();
risulterà nell'output:
Derive::Override()
Base::BaseFunction()
Oggetti predefiniti
Oltre a permettere la definizione di oggetti, JavaScript mette a disposizione tutta una serie di
oggetti che possono essere utilizzati per i propri script:
Anchor
Applet
Area
Array
Base
Basefont
Body
Button
Checkbox
Date
Document
Event
File
FileUpload
Form
Frame
Frameset
Function
Hidden
History
Iframe
Image
Layer
Link
Location
Math
Meta
Navigator
Number
Object
Option
Password
Radio
RegExp
Reset
Screen
Select
Style
String
Submit
Table
TableData
TableHeader
TableRow
Text
Textarea
Window
Array
Un array è un'associazione tra interi e valori di tipo arbitrario. In JavaScript, tutti gli oggetti
possono associare interi e valori, ma gli array sono un tipo speciale di oggetti che hanno dei
comportamenti specifici e metodi specializzati per l'uso degli indici interi (per es., join ,
slice , e push ).
Gli array hanno una proprietà length che è garantita essere sempre maggiore dell'indice
più grande usato nel vettore. È automaticamente aggiornata se si crea una proprietà con un
indice ancora maggiore. Scrivere un numero più piccolo nella proprietà length rimuove
gli indici più grandi. Questa proprietà è l'unica caratteristica speciale dei vettori, che li
distingue dagli altri oggetti.
Con gli elementi degli array si può utilizzare la normale notazione per accedere alle proprietà
degli oggetti:
myArray[1]
myArray["1"]
Queste due notazioni sono equivalenti. Non è possibile usare la notazione a punto o le
stringhe con una rappresentazione alternativa del numero:
Gli Array sono implementati in modo che solo gli elementi definiti usino memoria; sono
"vettori sparsi". Impostare myArray[10] = 'qualcosa' e myArray[57] =
'qualcosaltro' usa solo lo spazio per questi due elementi, come per ogni altro oggetto.
La lunghezza dell'array verrà sempre riportata come 58.
Strutture di controllo e condizionali
if ... else
L'istruzione contenuta all'interno delle parentesi graffe verrà eseguita solo e soltanto se la
condizione restituisce il valore true (vero),altrimenti verrà eseguita l'istruzione contenuta
nell'ELSE.
if (condizione)
istruzioni;
}
if (condizione)
istruzioni;
}
else
istruzioni;
}
Ciclo while
while (condizione)
istruzioni;
}
do
istruzioni;
} while (condizione);
Ciclo for
for ([espressione iniziale]; [condizione]; [espressione di
incremento])
istruzioni;
}
istruzioni;
}
istruzioni;
}
Istruzione switch
switch (espressione)
case valore1:
istruzioni;
break;
case valore2:
istruzioni;
break;
default :
istruzioni;
Funzioni
Una funzione è un blocco di istruzioni, dotato di una lista di argomenti (eventualmente vuota)
e che può avere un nome (anche se non è necessario). Una funzione può restituire un valore
tramite l'istruzione return.
istruzioni;
return espressione;
Il numero degli argomenti passati quando si chiama una funzione non deve necessariamente
essere uguale al numero degli argomenti della definizione della funzione (in altre parole, il
numero di parametri formali non deve necessariamente essere rispettato all'atto
dell'invocazione della funzione cioè nella specifica dei parametri attuali). All'interno della
funzione ci si può riferire alla lista degli argomenti anche tramite il vettore arguments
(quest'ultimo possiede la proprietà callee rappresentante un puntatore alla funzione
stessa).
Ogni funzione è un'istanza di Function, un tipo di oggetto base. Le funzioni possono essere
create e assegnate come ogni altro oggetto:
myFunc2();
Hello
Tra le altre tecniche con le quali uno script JavaScript può interagire con l'utente all'interno di
una pagina Web, ci sono le seguenti:
Nota: i dialog box non funzionano col browser Opera; non vi è nessun errore, semplicemente
non vengono eseguite.
Per scrivere a video (cioè nella pagina in cui si trova lo script) è possibile utilizzare il metodo
document.write(); le stringhe da visualizzare possono essere concatenate utilizzando
l'operatore di concatenazione '+':
<html>
<head>
<script type="text/javascript">
function bar(widthPct)
</script>
</head>
<body>
<script type="text/javascript">
bar(25)
</script>
</body>
</html>
Eventi
Gli elementi di testo possono essere la fonte di vari eventi che possono avviare un'azione se
è stato registrato un gestore di eventi ECMAScript. Nell'HTML, questi gestori di eventi sono
spesso funzioni definite come anonime direttamente all'interno del tag HTML. La sintassi per
richiamare un evento in uno script è la seguente:
Oggetto.evento = handler;
Lista eventi:
Il doppio click è un evento che ingloba gli altri e, per la precisione, attiva in successione
onmousedown, onmouseup, onclick.
Tag di applicazione
A, ADDRESS, APPLET, AREA, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER,
CITE, CODE, DD, DFN, DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FONT, FORM, HR, I, IMG, INPUT
type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT
type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text,
KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, NEXTID, NOBR, OBJECT, OL, P,
PLAINTEXT, PRE, RT, RUBY, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP,
TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP
Lista eventi:
A, ADDRESS, APPLET, AREA, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER,
CITE, CODE, DD, DFN, DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FONT, FORM, HR, I, IMG, INPUT
type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT
type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text,
KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, NEXTID, NOBR, OBJECT, OL, P,
PLAINTEXT, PRE, RT, RUBY, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP,
TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP
Lista eventi:
1. onDragDrop: evento attivato quando un utente trascina un oggetto sulla finestra del
browser o quando rilascia un file sulla stessa;
4. onDrag: attivato quando il mouse trascina un oggetto o una selezione di testo nella
finestra dello stesso browser o anche di un altro o anche sul Desktop;
9. onDrop: attivato quando il mouse si alza il tasto del mouse in seguito ad un'operazione
di trascinamento;
Tag di applicazione
A, ADDRESS, APPLET, AREA, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER,
CITE, CODE, DD, DFN, DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FONT, FORM, HR, I, IMG, INPUT
type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT
type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text,
KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, NEXTID, NOBR, OBJECT, OL, P,
PLAINTEXT, PRE, RT, RUBY, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP,
TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP
Lista Eventi:
1. onKeyPress: evento attivato quando un utente preme e rilascia un tasto o anche quando
lo tiene premuto;
3. onKeyUp: evento attivato quando un tasto, che era stato premuto, viene rilasciato;
onChange
Esempio:
<script type="text/javascript">
this.myForm.userEmail.focus();
this.myForm.userEmail.select();
function validateInput()
userInput = this.myForm.userEmail.value;
if (userInput.match("@"))
else
</script>
onCellChange
Attivato quando si modifica un elemento in una base di dati, per questa sua caratteristica ha
un uso non propriamente legato a JavaScript;
onPropertyChange
Evento attivato quando cambia la proprietà di un elemento;
onReadyStateChange
Evento attivato quando lo stato del caricamento di un elemento cambia, l'evento è utile, ad
esempio, per verificare che un elemento sia stato caricato.
Tag di applicazione
A, ADDRESS, APPLET, AREA, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER,
CITE, CODE, DD, DFN, DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FONT, FORM, HR, I, IMG, INPUT
type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT
type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text,
KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, NEXTID, NOBR, OBJECT, OL, P,
PLAINTEXT, PRE, RT, RUBY, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP,
TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP
onFocus
Questo handler è l'opposto di onBlur per cui si attiva quando l'utente entra in un campo;
onBlur
Viene attivato quando il puntatore del mouse o il cursore esce dalla finestra corrente
utilizzando il mouse o il carattere TAB. Applicato ai moduli, invece, tale handler si avvia se si
esce dal campo il cui tag contiene il controllo;
Esempio
<script type="text/javascript">
function addCheck()
</script>
onSelect
Attivabile quando si seleziona del testo all'interno di una casella di testo sia col mouse sia
tenendo premuto SHIFT e selezionando con i tasti Freccia;
onSelectStart
onbeforeEditFocus
Si attiva con un doppio click o con un click su un oggetto che ha già la selezione, quando
questo è in DesignMode;
onLoseCapture
Tag di applicazione
A, ADDRESS, APPLET, AREA, B, BDO, BIG, BLOCKQUOTE, BODY, BUTTON, CAPTION, CENTER,
CITE, CODE, DD, DFN, DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FONT, FORM, HR, I, IMG, INPUT
type=button, INPUT type=checkbox, INPUT type=file, INPUT type=image, INPUT
type=password, INPUT type=radio, INPUT type=reset, INPUT type=submit, INPUT type=text,
KBD, LABEL, LEGEND, LI, LISTING, MAP, MARQUEE, MENU, NEXTID, NOBR, OBJECT, OL, P,
PLAINTEXT, PRE, RT, RUBY, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP,
TABLE, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TR, TT, U, UL, VAR, XMP
onLoad
Questo handler funziona nel caricamento di oggetti, per lo più finestre e immagini;
onUnload
È l'opposto del precedente e funziona quando si lascia una finestra per caricarne un'altra o
anche per ricaricare la stessa (col tasto refresh);
onAbort
L'Handler dell'evento onAbort permette di specificare del codice nel caso in cui l'utente
blocchi il caricamento di un oggetto, o che si blocchi il caricamento di un'immagine.
onError
onBeforeUnload
Questo handler funziona allo stesso modo di onUnload ma si carica in un momento prima;
onStop
Questo handler funziona quando si ferma il caricamento della pagina con il tasto stop del
browser e dovrebbe funzionare anche allo stesso modo di onUnload caricandosi prima di
questo ma dopo onBeforeUnload.
Tag di applicazione
2. onUnload Questo gestore è usato con i tag <BODY> e <FRAMESET> anche in Internet
Explorer.
3. onAbort Questo gestore è usato solo con il tag<IMG> anche in Internet Explorer.
4. onError Questo gestore è usato solo con il tag<IMG> e con Window mentre in Internet
Explorer anche con <OBJECT> e <STYLE>.
5. onBeforeUnload Questo gestore è usato con i tag <BODY> anche in Internet Explorer.
6. onStop Questo gestore è usato con i tag <BODY> anche in Internet Explorer.
Eventi attivabili dai movimenti delle finestre
Lista Eventi:
1. onResize: Questo handler si attiva quando l'utente rimpicciolisce o ingrandisce una
finestra o un frame o, in caso particolare per Explorer, un oggetto a cui siano stati fissati
l'altezza e la larghezza o anche la posizione, come ad esempio un layer;
2. onScroll: attivato quando si effettua lo scrolling della pagina sia col mouse con i tasti
PGUP e PGDOWN o anche con il metodo doScroll.
Tag di applicazione
A, ADDRESS, APPLET, B, BIG, BLOCKQUOTE, BUTTON, CENTER, CITE, CODE, custom, DD, DFN,
DIR, DIV, DL, DT, EM, EMBED, FIELDSET, FORM, FRAME, Hn, HR, I, IMG, INPUT type=button,
INPUT type=file, INPUT type=image, INPUT type=password, INPUT type=reset, INPUT
type=submit, INPUT type=text, ISINDEX, KBD, LABEL, LEGEND, LI, LISTING, MARQUEE, MENU,
OBJECT, OL, P, PRE, S, SAMP, SELECT, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TABLE,
TEXTAREA, TT, U, UL, VAR, window, XMP
Le versioni più nuove di JavaScript (a partire da quelle usate in Internet Explorer 5 e Netscape
6) incorporano la possibilità di un costrutto try... catch per la gestione degli errori.
Il costrutto try ... catch ... finally intercetta le eccezioni generate da un errore
o da un'istruzione throw . La sua sintassi è la seguente:
try {
} catch (error) {
} finally {
Inizialmente, vengono eseguite le istruzioni all'interno del blocco try . Se viene lanciata
un'eccezione, il flusso di controllo dello script viene passato immediatamente alle istruzioni
del blocco catch, con l'eccezione che viene resa disponibile come argomento error . In
caso contrario, il blocco catch viene saltato. Una volta che il blocco catch è concluso,
o il blocco try viene eseguito fino alla fine senza che sia lanciata alcuna eccezione,
vengono eseguite le istruzioni nel blocco finally .
Riconoscimento vocale
Notifiche
Esempio di notifica
<button onclick="notifyMe()">Notifica!</button>
function notifyMe() {
if (!("Notification" in window)) {
Notification.requestPermission().then(function (permission)
{
});
Contenuto editabile
Possibilità per l'utente di modificare la pagina web come se si trovasse all'interno di un editor
WYSIWYG, anche se le modifiche non saranno salvate nella reale pagina web remota ma solo
visibili nel browser dell'utente:
<div contenteditable="true">
</div>
Drag out
data-
downloadurl="MIMETYPE:FILENAME:ABSOLUTE_URI_TO_FILE">download</a
>
file.addEventListener('dragstart', function(e) {
e.dataTransfer.setData('DownloadURL',
this.dataset.downloadurl);
}, false);
fileEntry.createWriter(function(writer) { .
bb.append('Hello World!');
writer.write(bb.getBlob('text/plain'));
}, opt_errorHandler);
}, opt_errorHandler);
Geolocalizzazione
Possibilità per l'utente di dichiarare a un'applicazione o una pagina web la propria posizione:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
position.coords.latitude, position.coords.longitude);
map.setCenter(latLng);
}, errorHandler);
Device Orientation
Riportare dati che indicano cambiamenti all'orientamento del dispositivo in relazione
all'attrazione di gravità. In particolare, i dispositivi portatili come i telefoni cellulari possono
utilizzare queste informazioni per ruotare automaticamente il display in modo da rimanere in
posizione verticale, presentando una vista a tutto schermo del contenuto web quando il
dispositivo viene ruotato in modo che la sua larghezza sia maggiore della sua altezza.
window.addEventListener('deviceorientation', function(event) {
var a = event.alpha;
var b = event.beta;
var g = event.gamma;
}, false);
saveButton.addEventListener('click', function () {
window.localStorage.setItem('value', area.value);
window.localStorage.setItem('timestamp', (new
Date()).getTime());
}, false);
textarea.value = window.localStorage.getItem('value');
<html manifest="cache.appcache">
window.applicationCache.addEventListener('updateready',
function(e) {
if (window.applicationCache.status ==
window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
window.location.reload();
}, false);
db.transaction(function(tx) {
});
Indexed DB
Questa API utilizza gli indici per abilitare le ricerche ad alte prestazioni dei dati. Sebbene
l'archiviazione web sia utile per archiviare quantità minori di dati, è meno utile per archiviare
quantità maggiori di dati strutturati. IndexedDB fornisce una soluzione.
idbRequest.onsuccess = function(event) {
var db = event.srcElement.result;
curRequest.onsuccess = ...;
};
webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.TEMPORARY
, function(used, remaining) {
);
webkitStorageInfo.requestQuota(webkitStorageInfo.PERSISTENT, 10
* 1024 * 1024, function(used) {
);
Web Workers
worker.postMessage('data');
task.js:
self.onmessage = function(event) {
// Do some work.
};
Web Socket
Comunicazione bidirezionale full-duplex sul Web: sia il server che il client possono inviare
dati in qualsiasi momento o anche contemporaneamente. Vengono inviati solo i dati stessi,
senza il sovraccarico delle intestazioni HTTP, riducendo drasticamente la larghezza di banda.
socket.onopen = function(event) {
socket.send('Ciao');
};
if (elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if (elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if (elem.requestFullScreen){
elem.requestFullScreen();
:full-screen-ancestor:root {
overflow: hidden;
:full-screen-ancestor {
z-index: auto;
transform: none;
transition: none;
pre:full-screen {
background-color: white;
var el = document.getElementById('section1');
el.focus();
els[0].focus();
els[0].focus();
Attributi personalizzabili
var el = document.querySelector('#out');
el.setAttribute('data-foo', 'bar');
el.innerHTML = html.join('');
Output:
id: good
name: joe
screenName: user1
foo: bar
Element.classList
L'utilizzo classList è un'alternativa all'accesso all'elenco di classi di un elemento come
stringa delimitata da spazi tramite element.className .
var el = document.querySelector('#main').classList;
el.add('highlight');
el.remove('shadow');
el.toggle('highlight');
console.log(el.contains('highlight')); // false
console.log(el.contains('shadow')); // false
console.log(el.classList.toString() == el.className);
//output:
History API
Offre la possibilità di modificare l'URL di un sito Web senza un aggiornamento completo della
pagina. Ciò è utile per caricare parti di una pagina con JavaScript in modo tale che il
contenuto sia notevolmente diverso e garantisca un nuovo URL.
link.addEventListener('click', function(event) {
history.pushState('Contact Page Form', 'Contact Page',
'/contact');
});
window.addEventListener('popstate', function(event) {
document.querySelector('h1').innerHTML = event.state;
});
webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.TEMPORARY
, function(used, remaining) {
);
webkitStorageInfo.requestQuota(webkitStorageInfo.PERSISTENT, 10
* 1024 * 1024, function(used) {
);
JS nel web 3D
Esempio di WebGL
function main() {
const gl = canvas.getContext("webgl");
return;
gl.clear(gl.COLOR_BUFFER_BIT);
}
window.onload = main;
Alternative
tooltip
effetti al passaggio del mouse sul testo, sui link e sulle immagini
Testo troncato
Ridimensionamenti di oggetti
Widget
Selettori di date, colori e altro nei form ("Color picker" e "Color checker")
Scorrimento fluido della pagina intera dall'header al footer (o viceversa) con un solo click
Modalità scura della pagina (rende una pagina meno luminosa senza che l'utente debba
agire sulla luminosità del monitor)
Calcolatrici
possono essere attuate senza l'utilizzo di JavaScript, cosa che con HTML 4 e CSS 2 era
spesso impossibile fare[10].
Esempi di UI JavaScript
Tooltip JS
Note
6. ^ Flex Quick Start - Defining data models | Adobe Developer Connection (https://www.ado
be.com/devnet/flex/quickstarts/defining_data_models.html) , su www.adobe.com.
URL consultato il 28 febbraio 2020.
7. ^ (EN) Matt Neuburg, AppleScript: The Definitive Guide: Scripting and Automating Your Mac
(https://books.google.it/books?id=zQy4mgqIccsC&pg=PT67&lpg=PT67&dq=JavaScript
+for+OSA&source=bl&ots=sffWwSTFP0&sig=ACfU3U0Tvju43QHP8fourQ0aoslUhrKSJA
&hl=it&sa=X&ved=2ahUKEwjJpI2KiPPnAhUxuaQKHVZgDrQQ6AEwBXoECAkQAQ#v=one
page&q=JavaScript%20for%20OSA&f=false) , "O'Reilly Media, Inc.", 4 gennaio 2006,
ISBN 978-1-4493-7915-5. URL consultato il 28 febbraio 2020.
10. (EN) 5 things you can do with CSS instead of JavaScript (https://blog.logrocket.com/5-thi
ngs-you-can-do-with-css-instead-of-javascript/) , su LogRocket Blog, 29 ottobre 2019.
URL consultato il 9 febbraio 2021.
13. ^ Andrea Pacchiarotti, Menù responsivo in HTML e CSS senza JavaScript e jQuery (http
s://www.andreapacchiarotti.it/archivio/menu-responsivo.html) , su Andrea
pacchiarotti. URL consultato il 9 febbraio 2021.
14. ^ Come fare un magico, animato Tooltips con CSS (https://webdesign.tutsplus.com/it/tut
orials/css-tooltip-magic--cms-28082) , su Web Design Envato Tuts+. URL consultato il 9
febbraio 2021.
15. ^ (EN) Using the HTML5 Drag and Drop API (https://web.dev/drag-and-drop/) , su
web.dev. URL consultato il 9 febbraio 2021.
Bibliografia
Douglas Crockford: JavaScript - Le tecniche per scrivere il codice migliore (Tecniche Nuove -
2009)
Voci correlate
AJAX
CorbaScript
DHTML
jQuery
JSON
Linguaggio di scripting
LiveConnect
TypeScript
JavaScriptCore
Altri progetti
Wikibooks contiene una guida al linguaggio JavaScript
Collegamenti esterni
Specifiche
(EN) ECMA 262 ECMAScript Language Specification (https://www.ecma-international.or
g/publications/standards/Ecma-262.htm) , su ecma-international.org.
Storia
(EN) Innovators of the Net: Brendan Eich and JavaScript (https://web.archive.org/web/
20080208124612/http://wp.netscape.com/comprod/columns/techvision/innovators_
be.html) (Marc Andreesen, Netscape TechVision, 24 Jun 1998)
Tutorial
(EN) JavaScript Tutorials (https://web.archive.org/web/20060715163308/http://www.t
utorials4javascript.com/) , su tutorials4javascript.com. URL consultato il 26 agosto
2006 (archiviato dall'url originale il 15 luglio 2006).
Cooperazione con…
(EN) PHP (https://pear.php.net/package-info.php?pacid=93) , su pear.php.net.
Tool
Un tool di formattazione (scritto in Java) per il linguaggio JavaScript (http://www.skenz.i
t/traduttori/tesine/index.php?title=Formattazione_javascript) , su skenz.it.
Portale Telematica: accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e
protocolli di rete
Estratto da "https://it.wikipedia.org/w/index.php?
title=JavaScript&oldid=124334955"
Ultima modifica 1 mese fa di 93.149.23.146