JavaScript-1
Transcription
JavaScript-1
Techniques à Objets et Internet Le Web et sa programmation Jean-François Perrot Université Pierre et Marie Curie (Paris 6) Cours n° 3 : Introduction à Javascript -1 • Que recouvre la notion de script ? • Javascript : programmation séquentielle Jean-François Perrot JavaScript 1 1 Sommaire Scripts en général : 3 - 7 Javascript et HTML : 8 - 13 Javascript : Syntaxe : 14 - 16 alert, confirm & prompt : 18 - 24 document.write : 25 - 32 Jean-François Perrot JavaScript 1 2 1 Vous avez dit script ? • Le mot anglais script désigne (dans l'acception qui nous intéresse) le texte d'un film ou d'une pièce de théâtre. Un script est donc un texte destiné à être joué - comme un programme... • En informatique, on entend généralement par script un "petit programme", et par suite on trouve couramment la définition : un langage de scripts est un langage de programmation allégé. (en V.O. : a scripting language is a lightweight programming language). • Mais en fait cette idée recouvre plusieurs situations assez différentes – en informatique "lourde" – en informatique "légère" pour l'écriture de pages Web. Jean-François Perrot JavaScript 1 3 scripts pour informaticiens Le terme script apparaît dans au moins deux contextes très différents : • en intelligence artificielle, dans une perspective proche de son sens ordinaire (films, théâtre), il désigne le comportement d'un acteur vu comme un tout (et non pas comme une collection de méthodes) • en génie logiciel, un script est un (petit) programme chargé de coordonner l'exécution de plusieurs autres (gros) programmes, supposés écrits dans des langages "sérieux" : par exemple des programmes de calcul scientifique écrits en C ou en Fortran seront pilotés par un script écrit en langage de commande (shell sous Unix) ou en Perl ou en TCL, etc. Jean-François Perrot JavaScript 1 4 2 scripts sur le Web clients & serveurs • Rappel : dans le fonctionnement d'une page Web, un client (le navigateur Web) va chercher chez un serveur (sur le réseau, à l'adresse donnée par l'URL) un programme (le texte html de la page concernée) qu'il exécute ensuite "en local". • Au cours de cette exécution, d'autres requêtes peuvent être adressées au même serveur, ou à d'autres. • Si on fait abstraction des problèmes de transmission, une session avec un navigateur Web peut donc être vue comme une alternance de calculs locaux (chez le client) et de calculs distants (chez le ou les serveurs). • Cette distinction induit deux types de scripts... Jean-François Perrot JavaScript 1 5 scripts sur le Web : chez le client • La notation html est censée coder la mise en forme d'un texte (illustré), dont l'interprétation par le navigateur donne une image fixe. • On souhaite introduire dans ce cadre fixe un peu d'animation, au moyen d'un petit programme qui sera interprété par le navigateur (vu comme un acteur récitant son rôle) : un script ! • Reste à convenir d'une norme réglementant l'extension nécessaire à la notation html. La chose ne peut pas être simple : il s'agit de définir un langage... – Netscape, Sun et autres promeuvent Javascript (dont le nom est trompeur : ce n'est pas un Java simplifié !) – Microsoft accepte Javascript mais développe en concurrence VBscript, dérivé de Visual Basic. • Le présent cours est consacré à Javascript . Jean-François Perrot JavaScript 1 6 3 scripts sur le Web : chez le serveur • Lorsqu'une requête est adressée à un serveur Web, sa tâche principale est de répondre à cette requête en envoyant une page html supposée déjà écrite. En supplément, le serveur peut exécuter un petit programme pour mettre au point le texte html qu'il va envoyer : un script ! • Les scripts exécutés par le serveur pour répondre à des requêtes de clients sont appelés scripts CGI (de Common Gateway Interface). Ils n'ont rien de commun avec les scripts exécutés par le navigateur-client. L'utilisation principale des scripts CGI est la réponse aux formulaires html (typiquement, des accès à des bases de données). • C'est aussi un des domaines d'application de Javascript. On reparlera de CGI quand il sera question des formulaires en Javascript. Jean-François Perrot JavaScript 1 7 La balise html <script...> • Un script apparaît dans le code html d'une page encadré par <script ...> .... </script> • La balise a deux attributs courants : – type (obligatoire), • valeur "text/javascript" ou "text/vbscript" • "vbscript" n'est interprété que par MS Explorer – src (optionnel) • valeur une chaîne donnant le chemin d'accès à un fichier contenant le code du script, portant l'extension ".js" • Exemple : <script type="text/javascript" src="tab.js" /> • Situation la plus fréquente <script type="text/javascript"> ...code Javascript... </script> Jean-François Perrot JavaScript 1 8 4 Variation des normes strict vs transitional • Autrefois, au lieu de type="text/javascript" on écrivait language="Javascript". Cette formulation est aujourd'hui deprecated (et interdite en XHTML-strict). • La norme XHTML-stricte prévoit qu'on doit écrire : <script type="text/javascript"> <![CDATA[ ...code Javascript...]]> </script> Mais cette forme reste obscure pour les navigateurs actuels. • Nous écrirons donc , <script type="text/javascript"> ...code Javascript... </script> et nous invoquerons la norme XHTML-transitional ! Jean-François Perrot JavaScript 1 9 Emplacement dans la page et exécution du script • Le script est un texte parenthésé qui doit respecter le parenthésage des balises html. • Il peut se situer soit dans l'en-tête (<head> ...</head>) soit dans le corps (<body> ...</body>) de la page, soit dans les deux (script composé de plusieurs morceaux bien parenthésés). • Les éléments situés dans l'en-tête se comportent comme des déclarations, ils ne s'exécutent pas directement (voir plus loin). • Les éléments situés dans le corps s'exécutent au fur et à mesure du chargement de la page. Jean-François Perrot JavaScript 1 10 5 <html> <head> <title>Essai de write</title> <script type="text/javascript"> var truc = "Hello World !"; </script> </head> Premier exemple Write0.html <body> <p>Debut</p> <p> <script type="text/javascript"> document.write("<p>"+truc+"</p>"); document.write("<h3>"+truc+"</h3>"); document.write("<h2>"+truc+"</h2>"); document.write("<h1>"+truc+"</h1>"); </script> </p> <p>Fin</p> </body> </html> Jean-François Perrot JavaScript 1 11 Remarques • Comme on voit, la concaténation des chaînes de caractères s'écrit "+", comme en Java. • Les balises html qui apparaissent dans les chaînes passées en argument à l'instruction document.write sont dûment interprétées par le navigateur. • Attention ! Dans l'exemple précédent, ne pas interpréter l'instruction document.write "une chaîne" – comme 'le document écrit "une chaîne"' – mais comme 'on écrit "une chaîne" dans le document en cours d'ouverture' • Notamment, on ne pourra plus rien écrire lorsque l'ouverture sera terminée et que le document sera fermé ! Jean-François Perrot JavaScript 1 12 6 Réflexes en Javascript • Les événements associés à différentes plages d'une page Web déclenchent des réflexes dont le code s'écrit en Javascript (cf. 2è cours JavaScript). • Le "pseudo-protocole" javascript: permet de loger une séquence de code Javascript partout où on peut placer une URL - p.ex. dans un lien hypertexte Exemple : Alerte2 <a href="javascript: alert('Il ne se passera rien !');"> Cliquer ici </a> Noter l'emploi différencié de deux guillemets de chaînes (simples et doubles) Jean-François Perrot JavaScript 1 13 Syntaxe de Javascript • Essentiellement comme en C (et en Java) : – affectation par "=" ; – comparateur d'égalité "==" / d'inégalité "!=" ; – instructions élémentaires terminées par le point-virgule ";" (optionnel si on écrit une instruction par ligne) ; – structures de contrôle parenthésées par des accolades "{" et "}". – Attention ! Majuscules/minuscules sont significatives, au contraire de html !!! • Différence majeure : les variables – les variables sont déclarées par le mot-clé var ; – toute déclaration est réputée globale ! • même celles qui sont faites dans une en-tête de boucle, à la Java... – les variables ne sont pas typées. • Autre différence : les tableaux – tab = new Array(7); crée un tableau à 8 éléments tab[0], tab[1], ... tab[7] Jean-François Perrot JavaScript 1 14 7 Chaînes de caractères en Javascript • Les chaînes de caractères sont les données les plus souvent manipulées dans une page Web. • D'usage fréquent : Les constantes de chaînes peuvent être encadrées soit de guillemets simples, soit de guillemets doubles (mais pas les deux à la fois) : – "une 'vraie' chaine" / 'une "vraie" chaine' • La concaténation des chaînes est notée "+" (comme en Java). – du coup l'opérateur "+" a un comportement non-standard... • Les nombres sont automatiquement convertis en chaînes. • Les chaînes sont converties en nombres par les fonctions standard parseInt et parseFloat. • Les caractères spéciaux "\n", "\t", "\b" sont acceptés. Jean-François Perrot JavaScript 1 15 Nombres, chaînes, conversions • Les nombres sont uniformément représentés en format flottant sur 32 bits (le type double de C et autres langages) – pas de distinction entre entiers et "réels" (contrairement à C et à Java) : 5/2 -> 2.5 • Les règles de conversion conduisent à des situations imprévues : – le "contexte" est fixé par la fonction ou par l'opérateur • document.write(--> chaîne) • x - y --> nombres "0xF" - "10" -> 5 – mais "+" est ambigu... • priorité aux chaînes : 1 + "2" -> "12" • mais dans l'ordre d'évaluation de gauche à droite ! – 1 + 2 + "3" -> "33", (1+2) + "3" -> "33" – mais 1 +(2 +"3") -> "123"... Jean-François Perrot JavaScript 1 16 8 L'instruction alert (1) Alerte1.html • Elle prend en argument une chaîne de caractères (sans saut de ligne) et affiche une fenêtre de dialogue sur l'écran. <script type="text/javascript"> alert("Il ne se passera rien !"); </script> • Le calcul est suspendu jusqu'à ce que l'utilisateur clique sur le bouton "OK". Jean-François Perrot <html> <head> <title>Essai d'alerte </title> </head> <body> <p>Debut</p> <p> </p> <p>Fin</p> </body> </html> JavaScript 1 17 L'instruction alert (2) Jean-François Perrot JavaScript 1 18 9 L'instruction confirm (1) Confirm1.html • Elle prend en argument une chaîne de caractères, affiche une fenêtre de dialogue sur l'écran, et renvoie une valeur vrai ou faux. • Le calcul est suspendu jusqu'à ce que l'utilisateur clique sur le bouton "OK" [valeur vrai] ou sur le bouton "cancel" (alias "Annuler") [valeur faux]. Jean-François Perrot <html> <head> <title>Essai de confirm </title> </head> <body> <p>Debut</p> <p> <script type="text/javascript"> if ( confirm ("D'accord ?") ) { alert ("OK !"); } else { alert ("KO !"); } </script> </p> <p>Fin</p> </body> </html> JavaScript 1 19 L'instruction confirm (2) Jean-François Perrot JavaScript 1 20 10 L'instruction confirm (3) Jean-François Perrot JavaScript 1 L'instruction prompt (1) Prompt1.html • Elle prend en argument deux chaînes de caractères, affiche une fenêtre de dialogue sur l'écran, et renvoie une valeur chaîne. • Le calcul est suspendu jusqu'à ce que l'utilisateur clique sur le bouton "OK" [valeur affichée] ou sur le bouton "cancel" (alias "Annuler") [valeur "vide" null, pas la chaîne vide ""]. Jean-François Perrot 21 <html> <head> <title>Essai de prompt </title> </head> <body> <p>Debut</p> <p> <script type="text/javascript"> var chaineLue = prompt("Quelle est votre couleur préférée ?", "bleu"); if ( chaineLue == "rouge" ) { alert ("OK !"); } else { alert ("KO !"); } </script> </p> <p>Fin</p> </body> JavaScript 1 </html> 22 11 L'instruction prompt (2) Jean-François Perrot JavaScript 1 23 JavaScript 1 24 L'instruction prompt (3) Jean-François Perrot 12 L'instruction document.write (1) • Elle prend en argument une chaîne de caractères (sans saut de ligne) et l'affiche dans la page. • Attention ! la chaîne affichée est considérée comme du html, elle est interprétée comme telle en fonction du contexte de la page au moment de l'affichage. Jean-François Perrot Write1.html <html> <head> <title>Essai de write</title> </head> <body> <p>Debut</p> <p> <b> <script type="text/javascript"> var chaineLue = prompt("Quelle est votre couleur préférée ?", "bleu"); document.write("La couleur que j'ai lue est le: </b> <p>"); document.write("<h1>"+ chaineLue); </script> </h1> </p> </p> <p>Fin</p> </body> </html> JavaScript 1 25 L'instruction document.write (2) Jean-François Perrot JavaScript 1 26 13 L'instruction document.write (3) Conséquences de l'interprétation html : – les blancs supplémentaires et les sauts de ligne sont sans effet ; – l'instruction document.writeln est (la plupart du temps) équivalente à write. Jean-François Perrot <html> <head> <title>Essai de write</title> </head> <body> <p>Debut</p> <p> <b> <script type="text/javascript"> var chaineLue = prompt("Quelle est votre_ couleur préférée ?", "bleu"); document.writeln("La couleur que \n"); document.write(" j'ai lue \n est le:"); document.write(" </b> <p>"); document.write("<h1>"+ chaineLue); </script> </h1> </p> </p> <p>Fin</p> </body> </html> JavaScript 1 27 Deuxième exemple : montrer les photos de la promo. l'en-tête de la page <html> <head> <title>Photo1</title> <script type="text/javascript"> var chemin = "../PhotJPG/"; // globale // Le tableau des noms lesGens = new Array(12); lesGens[0] = "Marie-Hélène AHAMADA"; lesGens[1] = "Loïc BARON-BARBIER"; lesGens[2] = "Youssouf COULIBALY"; lesGens[3] = "Clarisse DUCREUX"; lesGens[4] = "Véronique GILLON"; lesGens[5] = "Haiying HUANG"; lesGens[6] = "Virginie JOUBERT"; lesGens[7] = "Dorian LACOMBE"; lesGens[8] = "Arthur LACOMME"; lesGens[9] = "Jérôme MEYER"; lesGens[10] = "Xavier MONNOT"; lesGens[11] = "Léonard STRONG"; lesGens[12] = "Sébastien SÜSS"; </script> </head> Jean-François Perrot JavaScript 1 Photo1.html 28 14 <body> <p>Debut</p> <p> <script type="text/javascript"> var nom; var num; Deuxième exemple : montrer les photos de la promo. le corps de la page alert("Vous allez choisir une photo."); if ( confirm(" Allons-y ! ") ) { num = parseInt(prompt("Quel numero de photo ?", "")); if ( num > 13 ) { alert('Pas plus de 13, SVP'); } else { if ( num < 10 ) { chemin = chemin+"0"+num+".jpg"; } else { chemin = chemin+num+".jpg"; } Photo1.html nom = lesGens[num-1]; document.write('<img src='+chemin+'>'); document.write('<h3>'+nom+'</h3>'); } } </script> </p> <p>Fin</p> </body> </html> Jean-François Perrot JavaScript 1 29 JavaScript 1 30 Deuxième exemple : exécution (début) Jean-François Perrot 15 Deuxième exemple : exécution (fin) Jean-François Perrot JavaScript 1 31 JavaScript 1 32 Deuxième exemple : exécution accident Jean-François Perrot 16