Académique Documents
Professionnel Documents
Culture Documents
Technologies Web
Javascript
Alexandre Pauchet
BO.B.RC.18, pauchet@insa-rouen.fr
INSA - ASI TechnoWeb : Javascript 2/39
Plan
4 Programmation
évènementielle
INSA - ASI TechnoWeb : Javascript 3/39
Introduction (1/5)
Généralités
Javascript
Créé en 1995 par Netscape et Sun Microsystems
But : interactivité dans les pages HTML/XHTML, traitements
simples sur le poste de travail de l'utilisateur
Moyen : introduction de scripts dans les pages HTML/XHTML
Norme : http://www.ecma-international.org/publications/
standards/Ecma-262.htm
Programmation locale
sans javascript : programmation exécutée sur le serveur
avec javascript : inclusion de programmes dans les pages
HTML/XHTML an de les exécuter sur le poste client
Introduction (2/5)
Comparaison Javascript/Java
Comparatif
Java Javascript
- compilé - interprété
- orienté objets (classes, héritage) - orienté prototypes (héritage de propriétés)
- code dans applets (invisible) - code intégré (visible) ⇒ à ousquer
- typage fort - typage faible
- langage à part entière - langage à part entière
- environnements de développement - débuggage dicile, maintenant facilité par
l'arrivée de nouveaux outils
Remarque
Introduction (3/5)
Avantages et inconvénients
Points forts :
langage de programmation structurée ; de nombreuses applications
sont maintenant développées uniquement en Javascript, côté serveur
(en utilisant par exemple Node.js)
il enrichit le HTML/XHTML (intégré ⇒ interprété par le client),
il partage les prototypes DOM des documents HTML/XHTML
⇒ manipulation dynamique possible
gestionnaire d'événements (programmation asynchrone possible)
Limitations/dangers :
c'est un langage de script (interprété), très permissif
typage faible
ce n'est pas un langage orienté objet, mais par prototypage
Introduction (4/5)
Domaines d'application
Javascript permet
de programmer des actions en fonction d'événements utilisateurs
(déplacements de souris, focus, etc.)
d'accéder aux éléments de la page HTML/XHTML (traitement de
formulaire, modication de la page)
d'eectuer des calculs sans recours au serveur
Introduction (5/5)
Normalisation
La norme, mais...
http://www.ecma-international.org/
Javascript 1.8.5 :
publications/standards/Ecma-262.htm
Ce standard, repris par l'ISO, dénit les caractéristiques du noyau du
langage
Exemple1.xhtml
Exemple1.html
<!DOCTYPE html>
<html>
<head>
<meta http − equiv= " c o n t e n t − t y p e " content= " t e x t / html ; c h a r s e t = u t f − 8 " />
< t i t l e>Exemple de page HTML c o n t e n a n t du J a v a s c r i p t < / t i t l e>
< s c r i p t type= " t e x t / j a v a s c r i p t ">
/ / <!−−
function texte () {
document . w r i t e ( " Texte g é n é r é . " ) ;
}
/ / −−>
< / s c r i p t>
</head>
<body>
< s c r i p t type= " t e x t / j a v a s c r i p t ">
/ / <!−−
document . w r i t e ( " Code j a v a s c r i p t dans l e c o r p s du document . " ) ;
/ / −−>
< / s c r i p t>
<p>
Dans une f o n c t i o n a p p e l é e en c l i q u a n t <a href= " j a v a s c r i p t : t e x t e ( ) ">i c i < / a> ,
<p>
ou en p a s s a n t d e s s u s <a href= "" onmouseover= " j a v a s c r i p t : t e x t e ( ) ">cela< / a>.
</body>
</html>
INSA - ASI TechnoWeb : Javascript 10/39
Remarque
Exemple2.html
<!DOCTYPE html>
<html>
<head>
<meta http − equiv= " c o n t e n t − t y p e " content= " t e x t / html ; c h a r s e t = u t f − 8 " />
< t i t l e>Exemple de page HTML c o n t e n a n t du J a v a S c r i p t < / t i t l e>
< s c r i p t type= " t e x t / j a v a s c r i p t ">
/ / <!−−
f u n c t i o n message ( ) {
a l e r t ( " C e c i e s t un message d ' a l a r m e . " ) ;
}
/ / −−>
< / s c r i p t>
</head>
<body>
< s c r i p t type= " t e x t / j a v a s c r i p t ">
/ / <!−−
prompt ( " S a i s i s s e z du t e x t e " , "" ) ;
// −−>
< / s c r i p t>
...
INSA - ASI TechnoWeb : Javascript 12/39
...
<p onmouseover= " j a v a s c r i p t : message ( ) ; ">
Corps du document . <a href= " j a v a s c r i p t : a l a r m e ( ) ; ">Message d ' a l e r t e < / a>.
</p>
< f o o t e r>
< s c r i p t type= " t e x t / j a v a s c r i p t " src= " a l a r m e . j s ">< / s c r i p t>
</ f o o t e r>
</body>
</html>
alarme.js
f u n c t i o n alarme () {
alert (" Alerte ! Alerte ! Alerte !") ;
}
INSA - ASI TechnoWeb : Javascript 13/39
En XHTML :
<script type="text/javascript">
// <![CDATA[
Code Javascript
// ]]>
</script>
En HTML :
<script type="text/javascript">
// <!--
Code Javascript
// -->
</script>
Code alternatif :
<noscript>
Message à afficher en cas d'absence de Javascript
</noscript>
INSA - ASI TechnoWeb : Javascript 14/39
Description de la syntaxe
Variables faiblement typées
Opérateurs et instructions identiques au C/C++/Java
Des fonctions/procédures
globales (méthodes associées à tous les objets)
fonctions/procédures/méthodes dénies par l'utilisateur
Des objets (des prototypes)
prédénis (String, Date, Math, etc.)
liés à l'environnement
dénis par l'utilisateur
Commentaires : // ou /*...*/
Séparateur d'instruction : `;'
INSA - ASI TechnoWeb : Javascript 15/39
Utilisation de variables
Déclaration : var nom[=valeur];
déclaration optionnelle mais fortement conseillée
`undened' si aucune valeur à l'initialisation
aucun type !
Distinction de la localisation des variables (locale ou globale -déclarée
en dehors d'une fonction-)
Sensible à la casse
Typage dynamique (à l'aectation) ⇒ transtypage
Exemples
Si-sinon-alors : Switch-case :
i f ( condition ) { switch ( variable ) {
instructions case ' valeur1 ' :
} Instructions
[ else i f ( condition ) { break ;
instructions ...
}] default :
[ else { Instructions
instructions break ;
}] }
for (p in tableau ) { do {
Instructions Instructions
} } while ( condition ) ;
INSA - ASI TechnoWeb : Javascript 18/39
Remarques
Arguments et valeur en retour non typés
Nombre d'arguments non xé par la déclaration
Passage des paramètres par référence
INSA - ASI TechnoWeb : Javascript 19/39
Déclaration :
v a r nom = new A r r a y ( [ d i m e n s i o n ] ) ;
v a r nom = new A r r a y ( o1 , . . . , on ) ;
Accession avec [ ] (ex : tableau [ i ] )
les indices varient de 0 à N-1
les éléments peuvent être de type diérent
la taille peut changer dynamiquement
les tableaux à plusieurs dimensions sont possibles
Objet Date
Pas de propriété
Liste des méthodes :
getDate () setDate ()
getDay ()
getHours () setHours ()
getMinutes () setMinutes ()
getMonth () setMonth ()
getSeconds () setSeconds ()
getTime () setTime ()
getFullYear () setYear ()
getTimezoneOffset () ...
INSA - ASI TechnoWeb : Javascript 23/39
Objet String
Lorsqu'on dénit une constante ou une variable chaîne de caractères,
Javascript crée d'une façon transparente une instance String
1 propriété : length
Les balises HTML/XHTML ont leur équivalent en méthode
Liste (non exhaustive) des méthodes :
Objet Math
Propriétés : Math.PI et Math.E
Méthodes :
atan () acos () asin () tan () cos () sin () abs ( )
exp ( ) max ( ) min ( ) pow ( ) round ( ) sqrt () floor
()
random ( ) log ()
INSA - ASI TechnoWeb : Javascript 24/39
L'objet Window
Cet objet représente la fenêtre courante
defaultStatus frames length name parent
Propriétés :
status top window
Méthodes :
alert () confirm ()
prompt () clear ()
open () close ()
INSA - ASI TechnoWeb : Javascript 25/39
Exemple
Exemple
Exemple
Document
createElement(tagName)
getElementsByTagName(tagName)
getElementById(elementId)
createTextNode(texte)
NodeList
length
item(index)
...
INSA - ASI TechnoWeb : Javascript 31/39
...
node
nodeName, nodeValue, nodeType, parentNode
insertBefore(newChild, refChild), replaceChild(newChild, oldChild),
appendChild(newChild), removeChild(oldChild)
element
tagName
Élement HTML
id
lang
dir (sens de lecture : ltr/rtl)
style (font-family, font-size, color, outline, etc.)
INSA - ASI TechnoWeb : Javascript 32/39
Exemple3.html
<!DOCTYPE html>
<html>
<head>
< t i t l e>J a v a S c r i p t < / t i t l e>
<meta http − equiv= " c o n t e n t − t y p e " content= " t e x t / html ; c h a r s e t = u t f − 8 " />
</head>
<body onload= " j a v a s c r i p t : d e p a r t ( ) ; ">
<p id= " p a r a g r a p h e ">C e c i e s t un p a r a g r a p h e . </p>
< f o o t e r>
< s c r i p t type= " t e x t / j a v a s c r i p t ">
/ / <!−−
function depart () {
v a r body = document . getElementsByTagName ( " body " ) [ 0 ] ;
v a r t e x t e 1 = document . c r e a t e T e x t N o d e ( " H e l l o ! " ) ;
body . a p p e n d C h i l d ( t e x t e 1 ) ;
v a r p a r a g r a p h e = document . g e t E l e m e n t B y I d ( " p a r a g r a p h e " ) ;
v a r t e x t e 2 = document . c r e a t e T e x t N o d e ( "Un mot e s t a j o u t é . " ) ;
paragraphe . appendChild ( texte2 ) ;
}
/ / −−>
< / s c r i p t>
</ f o o t e r>
</body>
</html>
INSA - ASI TechnoWeb : Javascript 33/39
Conseils de programmation
RTFM : http://www.ecma-international.org/publications/
standards/Ecma-262.htm
Programmer TRÈS proprement
Le Javascript 'objet'
Pas de véritable classe, uniquement des créations d'objet et la
possibilité de dénir des propriétés
Création d'une `classe' d'objets par la dénition de son constructeur
Accession aux champs et méthodes : `.'
Un objet est un prototype et est stocké comme un tableau associatif
Chaque "champ" peut être une variable d'instance ou une méthode :
objet .methode() ⇔ objet ["methode"]
fonctions = objets de premier ordre
Héritage par prototype
Polymorphisme partiellement supporté
INSA - ASI TechnoWeb : Javascript 35/39
classe.prototype.nouvellePropriété = valeur;
Exemple
Prototype.html
Inheritance.html