Le Langage JavaScript A. Les scripts - unidentified
Transcription
Le Langage JavaScript A. Les scripts - unidentified
T-GSI STAGE RENOVATION - HTML.Chapitre 5 - Le Langage JavaScript Sources du document : • • • • • Livre d’Eric Crepin Conception de site Internet Intranet ; Le consortium W3C (texte de référence HTML 4.01 du 18 décembre 1997) ; Le site ALL WEB ; Le site ALL HTML ; Magazine Compétence Micro n° 9 et 16. Autres sources données à titre de bibliographie : • • • • Le site de Didier cabuzel ; Le site devparadise ; Le site WebDeveloper; Magazine Linux Pratique HS juin-juillet 2005, Développement Web. Olivier Mondet http://unidentified-one.net A. Les scripts Il est possible d’augmenter les performances de XHTML, en ajoutant des fonctionnalités de présentation, et d’interactivité. Ceci en utilisant directement au sein des documents XHTML des langages spécifiques tels que JavaScript (JS), ou VBScript (VBS). A.1. Description des scripts L’utilisation d’un script dans un fichier XHTML est de la forme : <!-- description d’un script --> <script type="text/javascript"> <![CDATA[ ... contenu du script ... ]]> </script> NB : La déclaration sera text/vbscript pour du VBScript. Ces scripts se placent généralement dans l’en-tête du document : <head> </head> La normalisation XHTML impose l’insertion de scripts externes placés dans un fichier à part (portant l’extension .js) et déclaré dans l’en-tête par la ligne : <script type="text/javascript" src="script/script.js"></script> Ch.5 - Le Langage JavaScript.doc page 1 / 37 om (2001-2006) A.2. Premier exemple Affichage de texte par le biais de JavaScript : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <p>Ici c’est le contenu de la page sans JavaScript !</p> </body> </html> <!--Début du script document.write("Hello World !"); // Fin du script--> L’intérêt de cette manipulation peut sembler obscur, et même décevant. Mais on vient de prouver qu’un programme écrit en JavaScript peut interférer dans une page Web. Or, les pages HTML ne sont pas des programmes, il n’y a pas de réactivité à des événements autres que ceux inscrits entre les balises. L’ajout de commandes va donc permettre de connaître beaucoup plus de possibilités (déclaration de variables, structures conditionnelles, structures de contrôle…). A.3. Entrées / sorties, utilisation de variables A.3.1. Affectation <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <p>Coucou !!</p> </body> </html> Ch.5 - Le Langage JavaScript.doc page 2 / 37 om (2001-2006) <!--Début du script var nom; nom=prompt("Veuillez entrer votre nom",""); alert("Heureux de faire votre connaissance, " + nom + " !"); // Fin du script--> A.3.2. Calculs Bien évidement le JavaScript donne toutes les possibilités d’un langage : Opérateur Signification Exemple + Addition a=10+c; Soustraction c=b-1; * Multiplication u=10*3 / Division t=x/y ++ Incrément -Décrément Exemple de calculs : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> </body> </html> Ch.5 - Le Langage JavaScript.doc page 3 / 37 om (2001-2006) <!--Début du script var a, b, resultat; a=prompt("Veuillez entrer un premier nombre","0"); b=prompt("Veuillez entrer un second nombre","0"); resultat=a*b; document.write("Le résultat de l’opération est le suivant : " + resultat + " !"); // Fin du script--> Vous noterez au passage que l’on a mis une valeur 0 par défaut dans la saisie. Cette valeur apparaîtra en surbrillance bleue et sera effacée dès que l’on saisira un nombre. Ch.5 - Le Langage JavaScript.doc page 4 / 37 om (2001-2006) A.3.3. Exemples de scripts simples (formes algorithmiques usuelles) Mot de passe (si l’utilisateur entre le bon mot de passe il peut accéder à la page d’accueil) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> </body> </html> var a, b, c , motdepasse; a="tra"; b="la"; c="lere"; motdepasse=prompt("Veuillez saisir le mot de passe",""); if (motdepasse==a+b+b+c) { location.href="pageaccueil.html"; } else { alert("Accès refusé ! Access denied"); } On aura reconnu la forme conditionnelle SI – ALORS – SINON - FINSI : Ch.5 - Le Langage JavaScript.doc page 5 / 37 om (2001-2006) Changement de couleur de l’écran (avec la commande switch) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> </body> </html> var couleur; couleur=prompt("Choisissez parmis ces couleurs : jaune, gris rouge","jaune"); switch(couleur) { case "rouge" : document.bgColor="red"; break; case "jaune" : document.bgColor="yellow"; break; case "gris" : document.bgColor="gray"; break; default : alert("Cette couleur n’existe pas !!"); } On aura reconnu la forme conditionnelle SELONQUE FAIRE – CAS )… - FINSELONQUE : Ch.5 - Le Langage JavaScript.doc page 6 / 37 om (2001-2006) Déviation vers des pages spécifiques : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> </body> </html> var couleur; couleur=prompt("Quel est votre nom d’utilisateur ?",""); switch(couleur) { case "pierre" : location.href="pagepierre.html"; break; case "marc" : location.href="pagemarc.html"; break; case "evelyne" : location.href="pageevelyne.html"; break; case "angelique" : location.href="pageangelique.html"; break; default : alert("Cette utilisateur n’existe pas vous ne pouvez pas accéder aux sites!!"); location.href="pageaccueil.html"; } Bien évidement on retrouve les structures itératives traditionnelles d’algorithmique : • for(initialisation ;condition d’arrêt ;incrément/décrément) {…} • while(condition) {…} Mot de passe version 2 (avec nombre limité d’accès) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>(X)HTML avec Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> </body> </html> Ch.5 - Le Langage JavaScript.doc page 7 / 37 om (2001-2006) var secret, motdepasse, i=0; secret="tralalalere"; while(motdepasse != secret && i<3) { motdepasse=prompt("Veuillez saisir le mot de passe",""); i++ ; } if (motdepasse==secret) { location.href="page.html"; } else { alert("Le mot de passe est incorrect !"); } NB : i++ correspond à i=i+1. On aura reconnu la forme itérative TANTQUE FAIRE – FINTANTQUE : A.4. Utilisation de fonctions JavaScript et gestionnaires d’événements A.4.1. Gestion des événements Les fonctions de JavaScript permettent de lancer des actions spécifiques (plusieurs fois de suite ou plusieurs fonctions différentes) dans une même page. Pour ce faire on les associe souvent à des gestionnaires d’événements. Evénement onAbort onBlur onClick onDblclick onChange onError onFocus onLoad onMouseOut onMouseOver onReset onSelect onSubmit onUnload Ch.5 - Le Langage JavaScript.doc Se produit quand … Le chargement d'une image a été interrompu. La souris quitte une zone formulaire. On clique sur un objet d’un formulaire ou un lien. On double-clique sur un objet. On change une zone texte ou une sélection d'élément. Il y a une erreur de script. La souris entre dans une zone formulaire. On charge la page dans le navigateur ou un objet graphique. La souris sort d'une zone imagemap, d’un objet La souris passe au-dessus d'un lien ou d'un formulaire, d’un objet graphique. On vide le contenu d’un formulaire. On sélectionne un élément dans un formulaire. On envoie un formulaire. On sort de la page (de la fenêtre). page 8 / 37 om (2001-2006) Balises associées aux événements : Balise <A> <AREA> <BODY> <FORM> <IMG> <INPUT> avec TYPE="button" ou "checkbox" ou "radio" <INPUT> avec TYPE="text" ou <TEXTAREA> <INPUT> avec TYPE="SELECT" Evénement onClick onMouseOver onMouseOut onMouseOver onMouseOut onBlur onFocus onLoad onUnload onReset onSubmit onAbort onLoad onError onClick onBlur onChange onFocus onSelect onBlur onChange onClick onFocus A.4.2. Insertion d’un bouton d’action et fonction JavaScript Exemple changement de couleur de la page : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page avec fonction de couleur</h1> <form> <input type="BUTTON" VALUE="Gris clair" onClick="silver()" /> </form> </body> </html> function silver() { document.bgColor="silver"; } Ch.5 - Le Langage JavaScript.doc page 9 / 37 om (2001-2006) On aura reconnu la déclaration d’une fonction FONCTION – FIN : A.4.3. Gestion des événements avec l’ouverture/fermeture de fenêtre Déclenchement d’une fonction au démarrage ou à la fermeture du document (la page devient grise dès que la page est lancée) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onLoad="silver()"> <h1>Page avec fonction de couleur</h1> </body> </html> function silver() { document.bgColor="silver"; } Ch.5 - Le Langage JavaScript.doc page 10 / 37 om (2001-2006) Un message d’adieu se lance dès que l’on ferme la fenêtre : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onUnLoad="byebye()"> <h1>Page avec fonction</h1> </body> </html> function byebye() { alert("Salut ! A la prochaine !!"); } A.4.4. Lancement des fonctions On peut également démarrer une fonction via un lien hypertexte : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body"> <h1>Page avec fonction</h1> <p> Si vous voulez lancer le message d’adieu cliquez <a href="javascript:byebye()">ici</a> </p> </body> </html> function byebye() { alert("Salut ! A la prochaine !!"); } Egalement via le passage sur un objet : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" href="votre_style.css" type="text/css"> <script type="text/javascript" src="js/script.js"></script> </head> <body"> <h1>Page avec fonction</h1> Ch.5 - Le Langage JavaScript.doc page 11 / 37 om (2001-2006) <p> <img src="images/titileft.gif" onMouseover="bonjour()" alt="cuicui"> </p> </body> </html> function bonjour() { alert("Salut ! Vous êtes passé sur moi !"); } img { border: 0px; } A.5. Fonctions avec passage de paramètre Par exemple le changement d’arrière plan peut se faire de la façon suivante : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1> Page avec fonction choix de couleur :</h1> <form> <input type="BUTTON" value="rouge" onClick="arriereplan('red')" /> <input type="BUTTON" value="jaune" onClick="arriereplan('yellow')" /> <input type="BUTTON" value="gris calir" onClick="arriereplan('silver')" /> </form> </body> </html> function arriereplan(couleur) { document.bgColor=couleur; } Ch.5 - Le Langage JavaScript.doc page 12 / 37 om (2001-2006) Commandes JavaScript “inline” (lancement de commandes JavaScript simples sans balises de script) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page avec instructions inline :</h1> <form> <input type="BUTTON" value="Microsoft" onClick="location.href='http://www.msn.fr'" /> <input type="BUTTON" value="Yahoo" onClick="location.href='http://fr.yahoo.com'" /> </form </body> </html> On aurait pu ouvrir le lien dans une nouvelle fenêtre de cette façon avec : ⇒ <input type="BUTTON" value="Yahoo" onClick="window.open('http://fr.yahoo.com')" /> L’objet history permet au visiteur de revenir à la page précédente (comme dans le navigateur) ou d’aller à la suivante : ⇒ <input type="BUTTON" value="Précédent" onClick="javascript:history.back()" /> ⇒ <input type="BUTTON" value="Suivant" onClick="javascript:history.forward()" /> Ch.5 - Le Langage JavaScript.doc page 13 / 37 om (2001-2006) B. Programmation des objets fenêtres avec JavaScript B.1. Les fenêtres pop-up On voit souvent de petites fenêtres (souvent publicitaires) qui se lancent lorsque l’on visite certaines pages : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page de lancement de fenêtres</h1> <p><a href="javascript:fenetre1()">Pub pour un super nouveau site</A></p> <p><a href="javascript:fenetre2()">Baratin en anglais</A></p> </body> </html> function fenetre1() { var win; win=window.open("images/titileft.gif", "Titi", "height=210, width=165, left=120, top=200"); } function fenetre2() { var win; win=window.open("fichiers/texte.html", "Blablabla", "height=100, width=250, left=300, top=150, resizable=yes"); win.setTimeout("window.close()",20000); } Ch.5 - Le Langage JavaScript.doc page 14 / 37 om (2001-2006) On peut prévoir dans la fenêtre qui est affichée sa fermeture automatique au bout d’un délai (à l’aide de setTimeout) ou avec un lien, ou avec un bouton. Soit par exemple la « fenêtre » suivante : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h4>Texte en anglais</h4> This program is produced by a member of the Association of Shareware Professionals (ASP). ASP wants to make sure that the shareware principle works for you. If you are unable to resolve a shareware-related problem with an ASP member by contacting the member directly, ASP may be able to help. The ASP Ombudsman can help you resolve a dispute or problem with an ASP member, but does not provide technical support for members' products. Please write to the ASP Ombudsman at 545 Grover Road, Muskegon, MI 49442 or send a CompuServe message via CompuServe Mail to ASP Ombudsman 70007,3536.<BR> <a href="javascript:window.close()">Fermer la fenêtre</a> </body> </html> Soit la page qui va la lancer : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page de lancement de fenêtres</h1> <p><a href="javascript:fenetre()">Lire le baratin en anglais</a></p> </body> </html> Soit le script qui générera la fenêtre : function fenetre() { var win; win=window.open("fichiers/texte2.html", "Blablabla", "height=200, width=250, left=300, top=150, resizable=yes"); } Ch.5 - Le Langage JavaScript.doc page 15 / 37 om (2001-2006) L’instruction avec un lien : <a HREF="javascript:window.close()">Fermer la fenêtre</a> aurait pu être remplacée par un bouton : <form> <input type="BUTTON" VALUE="Fermer" onClick="window.close()" /> </form> On peut également imaginer un menu qui s’ouvre dans une fenêtre à part et qui permet de manipuler à distance d’autres fenêtres : La première fenêtre va lancer ce menu : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page A</h1> </body> </html> Ch.5 - Le Langage JavaScript.doc page 16 / 37 om (2001-2006) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h3>Choisissez votre page</h3> <a href="javascript:renvoi('exemple85.html')" />Page A</a><br /> <a href ="javascript:renvoi('pageb.html')" />Page B</a><br /> <a href ="javascript:renvoi('pagec.html')" />Page C</a><br /> </body> </html> <!-- script qui concerne la première page (A) --> var win; win=window.open("fichiers/menu.html", "menu_navigation", "height=160, width=220, left=200, top=50"); <!-- script qui concerne la seconde page--> var destination; function renvoi(destination) { window.opener.location.href=destination; } Ch.5 - Le Langage JavaScript.doc page 17 / 37 om (2001-2006) B.2. Créer une fenêtre à la volée Il est également possible de créer une fenêtre XHTML avec JavaScript sans que celle-ci n’ait d’existence propre dans un fichier source (cf. la fenêtre avec titi qui est également dans ce cas). Exemple : une fenêtre est créée à la volée, elle est programmée pour se fermer au bout de 20000 millisecondes mais on y a tout de même ajouté un bouton pour fermer. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>HTML et JavaScript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h3>Nous avons une autre fenêtre</h3> </body> </html> var win; win=window.open("", "Nom", "height=200, width=300, left=0, top=0"); win.document.write("<?xml version='1.0' encoding='UTF-8'?>"); win.document.write("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'"); win.document.write("'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'");> win.document.write("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='fr' lang='fr'>"); win.document.write("<head><title>Fenêtre Flash</title>"); win.document.write("<meta http-equiv='Content-Type' content='text/html; charset=ISO8859-1' />"); win.document.write("</head><body>><h3>Texte de la fenêtre créée à la volée</h3>"); win.document.write("<form><input type='BUTTON' value='Fermer' onClick='window.close()' />"); win.document.write("</form></body></html>"); win.setTimeout("window.close()",20000); On remarquera que la fenêtre contient bien toutes les balises pour déclarer un document XHTML. Les multiples win.document.write() servent à construire le document avec un aisance plus grande que si l’on saisissait toute la structure en une seule ligne. Autre point remarquable : les guillemets contenus dans les win.document.write() sont transformés en simple quottes ‘. Cela s’explique du fait que l’instruction ouvre des guillemets pour attendre le contenu à inscrire dans le document. S’il y avait d’autres guillemets cela signifierait une rupture dans la chaîne de caractère pour ajouter, par exemple, le contenu d’une variable comme vu précédemment. Ch.5 - Le Langage JavaScript.doc page 18 / 37 om (2001-2006) C. Fonctions évoluées C.1. Déviations de pages Grâce à JavaScript on peut également opérer les mêmes déviations que les balises meta (en cas de déménagement par exemple). Déviation simple : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Déviation</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Nous avons déménagé</h1> </body> </html> location.href="autrepageweb.html"; Ch.5 - Le Langage JavaScript.doc page 19 / 37 om (2001-2006) Déviation différée (pour laisser le temps de lire l’annonce) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Déviation</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Nous avons déménagé</h1> </body> </html> setTimeout("location.href=’autrepageweb.html’",5000); C.2. Afficher les paramètres liés au navigateur Par exemple la détection du navigateur permet d’orienter le visiteur vers des pages adaptées : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Détection du navigateur</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Détection du navigateur</h1> </body> </html> var navigateur; navigateur=navigator.appName; switch(navigateur) { case "Microsoft Internet Explorer": location.href="pageie.htm"; break; case "Netscape": location.href="pagenet.htm"; break; default: alert("Vous ne possédez malheureusement pas le navigateur adapté à nos pages !"); } Ch.5 - Le Langage JavaScript.doc page 20 / 37 om (2001-2006) Pareillement on peut détecter les paramètres d’affichage et les afficher : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Détection du navigateur</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <form> <input type=″BUTTON″ value="Informations sur votre système" onclick="info()" /> </form> </body> </html> function info() { var hauteur, largeur, couleurs, os, nom, navigateur, langue, showwin; hauteur = screen.height; largeur = screen.width; couleurs = screen.colorDepth; os = navigator.platform; nom = navigator.appName; navigateur = navigator.userAgent; langue = navigator.language ; showwin=window.open("","showwin","width=520,height=300"); showwin.document.write("<?xml version='1.0' encoding='UTF-8'?>"); showwin.document.write("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'"); showwin.document.write("'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'");> showwin.document.write("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='fr' lang='fr'>"); showwin.document.write("<head><title>Infos</title>"); showwin.document.write("<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />"); showwin.document.write("</head><body><table border='1'>"); showwin.document.write("<tr><td>Hauteur de l’écran</td><td>" + hauteur + " pixels</td></tr>"); showwin.document.write("<tr><td>Largeur de l’écran</td><td>" + largeur + " pixels</td></tr>"); showwin.document.write("<tr><td>Profondeur des couleurs</td><td>" + couleurs + " bits</td></tr>"); showwin.document.write("<tr><td>Système d’exploitation</td><td>" + os + "</td></tr>"); showwin.document.write("<tr><td>Navigateur</td><td>" + nom +"</td></tr>"); showwin.document.write("<tr><td>Dénomination exacte</td><td>" + navigateur +"</td></tr>"); showwin.document.write("<tr><td>Langue (Netscape seulement)</td><td>" + langue +"</td></tr></table>"); showwin.document.write("<p><a href='javascript:window.close()'>Fermer la fenêtre</a></p>"); showwin.document.write("</body></html>"); showwin.document.close(); } Ch.5 - Le Langage JavaScript.doc page 21 / 37 om (2001-2006) Affichage dynamique de la date de la machine cliente : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Exemple Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onLoad="debuteDate(10000)" onUnload="clearTimeout(dd)"> <form name="Temps2" id="Temps2"> La date du jour est : <input type="text" name="date" id="date" size="18" /><br /> </form> </body> </html> function debuteDate(delai1) { var adate, date, amois; delai = delai1; adate = new Date(); date = adate.getDate(); amois = adate.getMonth()+1; if (amois == 1) date += " janvier"; else if (amois == 2) date += " février"; else if (amois == 3) date += " mars"; else if (amois == 4) date += " avril"; else if (amois == 5) date += " mai"; else if (amois == 6) date += " juin"; else if (amois == 7) date += " juillet"; else if (amois == 8) date += " août"; else if (amois == 9) date += " septembre"; else if (amois == 10) date += " octobre"; else if (amois == 11) date += " novembre"; else if (amois == 12) date += " décembre"; date += " " + adate.getYear(); date = " " + date; document.Temps2.date.value = date ; dd = setTimeout("debuteDate(delai)",delai1) ; } Ch.5 - Le Langage JavaScript.doc page 22 / 37 om (2001-2006) On remarquera de quelle manière on interagit avec un formulaire (ici pour afficher la date). document.Temps2.date.value = date ; Le formulaire Le document actif L’é l ém en t< inp u t… /> <form name="Temps2" id="Temps2"> La date du jour est : <input type="text" name="date" id="date" size="18" /><br /> </form> C.3. Affichages de textes dynamiques Utilisation d’une Bannière de texte : HTML fournit bien un balisage permettant la gestion des bannières déroulantes : <marquee> ... </marquee> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Exemple Javascript</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onLoad=" Msg='Texte déroulant dans une Bannière ... (à suivre)'; banniere(100);" onUnload="clearTimeout(ban)"> <form name="formban" id="formban"> <input type="text" name="Fbanniere" id="Fbanniere" size="40" /><br /> </form> </body> </html> Ch.5 - Le Langage JavaScript.doc page 23 / 37 om (2001-2006) var position=0, ban, delai, Msg; function banniere(delai1) { delai = delai1; if (position >= Msg.length) position = 0; else if (position == 0) { Msg = ' ' + Msg; while (Msg.length < 128) Msg += ' ' + Msg; } document.formban.Fbanniere.value = Msg.substring(position,position+Msg.length); position++; ban = setTimeout("banniere(delai) ",delai1); } Afficher un texte changeant : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Texte changeant</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onLoad="textechangeant()"> <h1>Des livres qui vous changeront la vie !</h1> <form name="form1" id="form1"> <input type="text" name="champtexte" id="champtexte" size="50" /> </form> </body> </html> var i, message; i=0; message=new Array(); message[0]="Nouveau : Livre sur Windows 3012"; message[1]="Réédition : Les secrets du BTS IG"; message[2]="Offre spéciale : Séminaire Simon & Garfunkel "; message[3]="Best-seller : Formation rapide à Mondet 2002"; function textechangeant() { document.form1.champtexte.value=message[i] if (i<message.length-1) { i++; } else { i=0; } setTimeout("textechangeant()",5000); } Ch.5 - Le Langage JavaScript.doc page 24 / 37 om (2001-2006) Texte changeant dans la barre d’état : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Texte changeant</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body onLoad="textechangeant()"> <h1>Des livres qui vous changeront la vie !</h1> </body> </html> var i, message; i=0; message=new Array(); message[0]="Nouveau : Livre sur Windows 3012"; message[1]="Réédition : Les secrets du BTS IG"; message[2]="Offre spéciale : Séminaire Simon & Garfunkel"; message[3]="Best-seller : Formation rapide à Mondet 2002"; function textechangeant() { window.status=message[i] if (i<message.length-1) { i++; } else { i=0; } setTimeout("textechangeant()",5000); } Ch.5 - Le Langage JavaScript.doc page 25 / 37 om (2001-2006) D. Navigation dans les menus grâce à JavaScript Il est également possible de lancer l’exécution de plusieurs fonctions ou de lancer plusieurs pages avec les menus déroulants (cf. les chapitres précédents pour plus de détails sur les formulaires). D.1. Menus, effets Ici un menu déroulant avec un bouton GO : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Bouton Go!</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Menu déroulant avec un bouton Go</h1> <form name="liste1" id="liste1"> <select size="1" name="choix" id="choix"> <option value="rien" SELECTED>Veuillez effectuer votre choix !</option> <option value ="fichiers/pagea.html">page A</option> <option value ="fichiers/pageb.html">page B</option> <option value ="fichiers/pagec.html">page C</option> <option value ="rien">------ligne de séparation-----</option> <option value ="fichiers/paged.html">page D</option> </select> <input type="BUTTON" value="Go !" onClick="changer()" /> </form> </body> </html> function changer() { var selection, page; selection=document.liste1.choix.selectedIndex; page=document.liste1.choix.options[selection].value; if (page=="rien") { document.liste1.reset(); return false; } else { location.href=page; } } Note : On récupère l’indice du choix effectué (ici de 0 à 5) avec l’instruction : • selection=document.liste1.choix.selectedIndex puis on récupère le contenu du choix opéré (qui est assigné avec <option value="…") avec l’instruction : • page=document.liste1.choix.options[selection].value Ch.5 - Le Langage JavaScript.doc page 26 / 37 om (2001-2006) D.2. Gestion des frames A partir de l’exemple précédent on peut facilement imaginer les possibilités offertes par une telle interactivité avec le visiteur. On peut aussi éviter d’utiliser le bouton Go et rendre actif les choix dans le menu directement avec onChange. Par exemple un menu placé en frame : Le fichier frameset nommé exemple951.html (cf. le chapitre précédant pour plus de détails sur les formulaires) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Mon super site</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <frameset rows="120,*" border="0"> <frame src="exemple952.html" name="navi" id="navi" resizable="NO" /> <frame src="fichiers/pagea.html" name="main" id="main" /> </frameset> </html> Le fichier suivant est le fichier exemple952.html utilisé dans la barre de navigation : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Navigation</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" href="votre_style.css" type="text/css"> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Les pages de Georges</h1> <form name="liste1" id="liste1"> <select size="1" name="choix" id="choix" onChange="changer()"> <option value="rien" selected="selected">Veuillez effectuer votre choix !</option> <option value="fichiers/pagea.html">page A</option> <option value="fichiers/pageb.html">page B</option> <option value="fichiers/pagec.html">page C</option> Ch.5 - Le Langage JavaScript.doc page 27 / 37 om (2001-2006) <option value="rien">------ligne de séparation-----</option> <option value="fichiers/paged.html">page D</option> </select> </form> </body> </html> function changer() { var selection, page; selection=document.liste1.choix.selectedIndex; page=document.liste1.choix.options[selection].value; if (page=="rien") { document.liste1.reset(); return false; } else { parent.main.location.href=page; } } body { background: sylver; } Ch.5 - Le Langage JavaScript.doc page 28 / 37 om (2001-2006) On peut également imaginer un frameset avec lignes et colonnes (la colonne de gauche servant à la navigation, la colonne de droite divisée en deux lignes : en haut le titre, en bas les pages sélectionnées). Le fichier frameset nommé exemple961.html : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Mon super site</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <frameset cols="120,*" border="0"> <frame src="exemple962.html" name="navi" id="navi" scrolling="NO" resizable="NO" /> <frameset rows="110,*" border="0"> <frame src="fichiers/titresite.html" name="titre" id="titre" scrolling="NO" resizable="NO" /> <frame src="fichiers/pagea.html" name="main" id="main" /> </frameset> </frameset> </html> Le fichier titresite.html comprend juste le titre du site situé en permanence dans la frame nommée titre : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Titre du site</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" href="votre_style.css" type="text/css"> <script type="text/javascript" src="js/script.js"></script> </head> <body> <center> <h1>Les pages de Georges</h1> </center> </body> </html> body { background: sylver; } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Navigation</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" href="votre_style.css" type="text/css"> <script type="text/javascript" src="js/script.js"></script> </head> <body> <center> <img src="Images/titileft.gif"><br /> <h3>Choisissez</h3><br /> </center> Ch.5 - Le Langage JavaScript.doc page 29 / 37 om (2001-2006) <a href="javascript:pageselect('pagea.html')">Page <a href="javascript:pageselect('pageb.html')">Page <a href="javascript:pageselect('pagec.html')">Page <a href="javascript:pageselect('paged.html')">Page </body> </html> A</a><br B</a><br C</a><br D</a><br /> /> /> /> var selection; function pageselect(selection) { parent.main.location.href="fichiers/"+selection; } body { background: pink; } ⇒ Chacune des pages utilisées dans la section frame ont la structure suivante : Par exemple Pagea.html : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Page A</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <link rel="stylesheet" href="votre_style.css" type="text/css"> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page A</h1> </body> </html> Ch.5 - Le Langage JavaScript.doc page 30 / 37 om (2001-2006) if (parent.location.href==location.href) { parent.location.href="../exemple961.html"; } Le script permet d’avoir le contrôle de la présentation des pages dans leur frameset d’origine (ici exemple961.html). En effet on pourrait très bien ouvrir la page pagea.html - par exemple - en dehors du frameset qui la contient. Pour éviter cela on force la page à détecter elle-même si la page parente est elle-même : if (parent.location.href==location.href) dans ce cas cela veut dire qu’on l’a ouvert directement alors on rétabli l’ordre des choses en forçant le chargement du frameset comme page parente : parent.location.href="../exemple961.html". Parfois les pages accessibles d’un autre site sont incluses dans leur propre frameset. Cela peut paraître pratique certaines fois mais on empêche de cette manière de pouvoir prendre le lien vers cette page. Il est donc possible de rajouter du code JavaScript qui permet de se sortir d’un frameset et occuper la fenêtre de façon autonome. if (parent.location.href!=location.href) { parent.location.href=location.href ; } D.3. Les commandes liées aux iFrames On peut désigner les iFrames en JavaScript tout comme on s’adresse à la page courante ou aux frames : window.frames[Nom_iframe] window.frames[Nom_iframe.document] Voici un exemple de déclaration d’une fonction pour charger une iFrame (en pleine page) : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Page Avec iFrame</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Page Avec iFrame</h1> <a href="Exemple393.htm" onclick="return chargIframe('ifrm', this.href)">iframe</a> </body> </html> Var iframeName, url function chargIframe(iframeName, url) { if (window.frames[iframeName]) { window.frames[iframeName].location=url; return false; } else return true; } L’ajout de return false permet uniquement de décrire une fonction qui ne retourne pas de valeur. Ch.5 - Le Langage JavaScript.doc page 31 / 37 om (2001-2006) D.4. Les images sensitives Il est possible de changer l’aspect d’un lien, d’un graphique lorsque l’on passe dessus avec la souris. En effet on peut respecter la codification actuelle des couleurs indiquant les liens mais également recourir à des images pour changer l’aspect des liens ou changer leur système d’apparence. Exemple d’une image sensitive. Nous avons construit deux images qui formeront un lien vers une page web. Nous avons décidé qu’au moment où l’on positionnera la souris sur notre image celle-ci changera d’aspect : AVANT (bout1.gif) APRES (bout2.gif) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Images sensitives</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Le menu dynamique</h1> <a href="fichiers/pagea.html" onMouseover="document.lien1.src=menu2.src" onMouseout="document.lien1.src=menu1.src"><img src="bout1.gif" name="lien1" id="lien1" /></a> </body> </html> var menu1 = new Image(); var menu2= new Image(); menu1.src="images/bout1.gif"; menu2.src="images/bout2.gif"; body { background: darkcyan; } img { width: 50px; height: 25px; border: 0px; } Ch.5 - Le Langage JavaScript.doc page 32 / 37 om (2001-2006) Autre approche avec le code situé dans la balise img : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Images sensitives</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> </head> <body> <h1>Le menu dynamique</h1> <a href="fichiers/pagea.html" onMouseover="document.lien1.src='images/bout1.gif'" onMouseout="document.lien1.src='images/bout2.gif'"><img src="bout1.gif" name="lien1" id="lien1" /></a> </body> </html> body { background: darkcyan; } img { width: 50px; height: 25px; border: 0px; } E. Les formulaires Les formulaires permettent surtout de gérer des données en provenance des visiteurs. Soit le formulaire qui permet à un client de choisir un produit : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang=″fr″ lang=″fr″> <head> <title>Commande</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript" src="js/script.js"></script> </head> <body> <h1>Commandez un produit !</h1> <form action="mailto:[email protected]?subject=commandeproduit" method="post" name="question" id="question" enctype="text/plain" onReset="return securite('vider')" onSubmit="return securite('expédier maintenant')"> Le produit coûte 300 EUR et les frais de port s’élèvent à 45 EUR. <hr /> Je commande exactement <input type="text" size="2" maxlength="2" name="nombre" id="nombre" value="1"> unités du produit <br /> <input type="checkbox" name="express" id="express" value="oui"> Livraison express (70 EUR de supplément) <BR> Je le voudrais en <input type="radio" name="sorte" id="sorte" value="noir" checked>Noir <input type="radio" name="sorte" id="sorte" value="argent">Argent <input type="radio" name="sorte" id="sorte" value="or">Or <hr /> Ch.5 - Le Langage JavaScript.doc page 33 / 37 om (2001-2006) <br />Titre : <select name="titre" id="titre" size="1"> <option value="M.">M.</option> <option value="Mme">Mme</option> </select> <br />Prénom : <input type="text" name="prenom" id="prenom" /> <br />Nom : <input type ="text" name="nom" id="nom" /> <br />Numéro client : <input type ="text" name="nrclient" id="nrclient" maxlength="8" /> <br />Adresse E-mail : <input type ="text" name="email" id="email" /> <p><input type ="button" value="Vérifier la saisie et calculer le montant" onClick="formtest()"/> </p> <p><input type ="reset" value="Vider le formulaire" /> <input type ="submit" value="Envoyer les données" /></p> </form> </body> </html> function securite(question) { var reponse; reponse=confirm("Etes-vous sûrs de vouloir " + question + " le document ?"); return reponse; } function formtest() { var prenom, nom, nrclient, email, arobase, point, i, resultat; prenom=document.question.prenom.value; nom=document.question.nom.value; nrclient=document.question.nrclient.value; email=document.question.email.value; if (nom=="" || prenom=="" || nrclient=="" || email=="") { alert("Remplissez s'il vous plait tous les champs !") return false; } arobase=0; point=0; for (i=0; i<email.length; i++) { if (email.charAt(i)=="@") { arobase=1; } if (email.charAt(i)==".") { point=1; } } if (arobase!=1 || point!=1 || email.length<7) { alert("Ce n'est pas une adresse E-mail valide !"); document.question.email.focus(); document.question.email.select(); return false; } resultat=document.question.nombre.value*75 resultat=resultat+12 if (document.question.express.checked) { resultat=resultat+20 } alert("Bonjour, " + prenom + " " + nom + ",\nVous devez payer "+ resultat +" EUR !"); } Ch.5 - Le Langage JavaScript.doc page 34 / 37 om (2001-2006) body { background: lightcyan; } Hr { width: 420; float: left; } D’une part une fonction de confirmation a été créée function securite(question) et affiche un message adapté suivant la question que l’on veut poser (paramètre : question) ; d’autre part la vérification du contenu du formulaire (champs non vides) est effectuée par la fonction function formtest(). L’instruction return permet de retourner la valeur de la réponse (true/false) à la question de la fonction securite(question) et de retourner le paramètre de validité du formulaire dans la fonction formtest(). Lorsque le return false est rencontré la fonction s’arrête et le reste du code n’est pas exécuté. La fonction securite(question) retourne son résultat dans l’invocation faire dans les paramètres de FORM : onReset="return securite('vider')" veut dire que lorsque l’on a choisi de vider le formulaire(input type="reset") alors onReset sera exécuté si la réponse à la question est positive (Ok) et recevra alors le paramètre true. Le fait de vouloir envoyer les données (input type="submit") après confirmation (onSubmit="return securite('expédier maintenant') l’attribut ACTION de la commande FORM entrera en service et lancera un mail avec le contenu de la commande. Le chapitre suivant abordera de façon plus approfondie les envois de données vers les serveurs avec les pages dynamiques. Olivier Mondet http://unidentified-one.net Ch.5 - Le Langage JavaScript.doc page 35 / 37 om (2001-2006) Annexe 1 : Instructions JavaSscript : Instruction array() charAt(x) confirm() date() document.bgColor="couleur" document.form1.champtexte.value document.liste1.choix.options[num_ choix].value document.liste1.choix.selectedIndex document.cookie="nom_cookie=vale ur_cookie; expires=date_au_format_GMT" document.liste1.reset() document.nom.src Document.write("Texte") getDate() getDay() getFullYear() getHours() getMinutes() getMonth() getSeconds() getYear() Image() Ch.5 - Le Langage JavaScript.doc Utilisation Tableau déclaré : montableau = new Array(n) avec n la longeur du tableau et montableau[0] le premier élément de ce tableau. Il est également possible de déclarer un tableau en lui affectant des valeurs montab = new Array(« cerise », « tomate », « stylo ») ici un tableau de dimension 3. Livre le caractère à la x-ième position de la chaîne de caractères (le premier caractère est à la position 0). Longueur=phrase.charAt(x). Boite de dialogue de confirmation qui renvoi la valeur true si Ok est pressé, false si annuler est pressé. Objet date déclaré : madate = new Date() Permet de changer la couleur de fond d’écran Assigne (ou récupère) le contenu du champ nommé champtexte du formulaire nommé form1. Par exemple document.form1.champtexte.value= »Je suis le plus booo » ou variable=document.form1.champtexte.value Permet de récupérer le contenu (la valeur déclarée dans VALUE) de l’option options[numéro] du menu choix dans le formulaire liste1 : contenu=document.liste1.choix.options[selection].value Permet de récupérer l’indice de l’élément choisi dans le menu déroulant nommé choix du formulaire nommé liste1 : num_choix=document.liste1.choix.selectedIndex Place (ou lit) un cookie. Il faut lui donner une date d’expiration si l’on veut qu’il perdure un certain temps sur l’ordinateur distant : document.cookie="Nomsurfeur="+nom+";expires="+date.toG MTString(); document.cookie="Hobby="+hobby+";expires="+date.toGMTS tring(); Pour lire un cookie : Si celui est plein document.cookie!="" alors on prend le contenu avec séparation des éléments (split) avec le ; par exemple : contenu=document.cookie.split("; "); Permet de réinitialiser le formulaire nommé liste1. Permet de fixer l’url de la source (src) d’un élément (nommé ici nom) de la page courante. Permet d’écrire dans la page web. Renseigne sur me jour du mois sous la forme d’un nombre compris entre 1 et 31 : Var date; madate= new Date() ; date=madate.getDate(); Renseigne sur le jour de la semaine sous la forme d’un nombre compris entre 0 et 6 (0=dimanche). Renseigne sur l’année sous forme d’un nombre à quatre chiffres. Informe sur les heures. Informe sur les minutes. Renseigne sur le mois sous la forme d’un nombre compris entre 0 et 11 (0=janvier). Informe sur les secondes Renseigne sur l’année. Objet Image déclaré de la façon suivante : Monimage = new Image(); page 36 / 37 om (2001-2006) lenght location.href="adresse url" math.random() math.round navigator.appName navigator.langage navigator.platform navigator.userAgent parent.nom_frame.location.href="url " parent.location.href="url" screen.availheight screen.availwidth screen.colorDepth Screen.height screen.width setTimeout("Action", millisecondes) split("; ") src substring(position1, position2) toGMTString() toLowerCase() toUpperCase() Var variable ; variable=prompt("texte","valeur par défaut") Window.close() window.open("adresse url") window.frames[Nom_iframe] Window.open("contenu", "nom", "height=Pixel, width=Pixel, left=Pixel, top=Pixel") Window.opener.location.href="url" window.status Détermine la longueur d’une chaîne de caractères (ou d’un tableau). longueur=phrase.length. Envoi vers une adresse Génère des nombres pseudo aléatoires : math.random()*(ba)+a (b le plus grand nombre désiré, a le plus petit nombre désiré). Arrondi un nombre : math.round(1.5) est égal à 2. Nom du navigateur Langue (uniquement pour Netscape) Système d’exploitation Désignation précise du navigateur Assigne une page désigné dans la location nommée nom_frame de la page parente (normalement la page frameset). Assigne (ou Donne) l’adresse de l’url parente. Hauteur visible de l’écran en pixels Largeur visible de l’écran en pixels Profondeur en couleurs (8, 16, 32 bits) Auteur de l’écran en pixels Largeur de l’écran en pixels Permet d’exécuter une action avec retardement Cette méthode convertit une chaîne de caractères en un tableau. Le ; est le séparateur choisi ici entre les différents éléments du tableau. Spécifie l’url de la source d’un objet comme par exemple un objet image dont on veut fixer la source : monimage=new image(); monimage.src="image.gif"; Affiche les caractères entre deux positions d’une phrase. La date est transformée en une chaîne de caractères correspondant à la norme IETF. Le 23 février 2002 deviendra : Sat, 23 feb 2002 12 :24 :23 UTC. Convertit une chaîne de caractères en minuscules. Convertit une chaîne de caractères en majuscules. Déclaration d’une variable Permet d’ouvrir une boite de dialogue d’entrée dont la valeur sera affectée à variable. Fermeture d’une fenêtre. Permet d’ouvrir une nouvelle fenêtre. Permet de s’adresser à un iframe. Permet d’ouvrir précisément. une nouvelle fenêtre en la formatant Cela permet de manipuler la fenêtre qui a créé (ouvert) la fenêtre appelée. Texte de la ligne d’état d’une fenêtre Windows. Olivier Mondet http://unidentified-one.net Ch.5 - Le Langage JavaScript.doc page 37 / 37 om (2001-2006)