Javascript - UFR de Mathématiques et Informatique
Transcription
Javascript - UFR de Mathématiques et Informatique
Javascript Gaël Mahé UFR math-info automne 2004 Qu'est-ce que javascript ? Objectif = dynamiser html : Ø Adapter la mise en page Ø Ouvrir de nouvelles fenêtres Ø Réagir à des actions de l'utilisateur Ø Traiter des infos saisies par l'utilisateur localement, sur le client 2 Insertion des scripts dans html <html> <head> <script language="javascript"> function nomFonction() {code javascript} </script> </head> OU <script src="fichier.js"> </script> <body> … function nomFonction() <script> {code javascript} // code javascript, // avec appel de la // fonction fichier.js </script> OU … </body> </html> <a href="javascript:nomFonction()"> un lien </a> URL javascript 3 Variables et types simples entiers : décimal (1223), octal (0776) et hexadécimal (0x12ED) 5 types primitifs simples : 2.5e-3 Typage dynamique. Ex : réels : -2.5, • number var toto = 10; // type number • boolean true / false ... • string toto = 'bonjour'; // -> type string • null • undefined <script> var text_1 = "Il demanda \"Ca va ?\" "; var text_2 = "Elle répondit \" Oui \" "; document.write(text_1 + "<br>" + text_2); </script> Il demanda "Ca va ?" Elle répondit "Oui" 4 Tableaux Déclaration : var Tableau = new array(12); OU var Tableau = [12,,14,6,4]; Exemple : <script language="javascript1.3"> var Tableau = new Array() Tableau[0] = 'debut'; Tableau[1] = 'milieu'; Tableau[2]= 'fin' document.write('La taille de ce tableau est : ' + Tableau.length) </script> Tableaux multidimensionnels : var matrice=new Array(2) ; matrice[0]= new Array(2) ; matrice[1]=new Array(2) ; matrice[0][0] = 1 ; matrice[1][1] = 1 ; Tableaux hétérogènes : Tableaux associatifs : var t = [2, "lettre", [a,b] ] t["Gaston"]="Lagaffe" 5 Instructions de contrôle (1) if (condition) { instruction1 …….. instructionp } else { instruction1 …….. instructionp } switch (expression) { case val1: instruction1; break ; ………… case valn: instructionn; break ; default: instructiondefaut } Exemple : <script> var chiffre = 2 switch (chiffre) { case 1: document.write('Un'); break ; case 2: document.write('Deux'); break ; case 3: document.write('Trois'); break ; default: document.write('Ce n\' est pas un chiffre < 4') } </script> 6 Instructions de contrôle (2) while (condition) { instruction1 ; do { instruction1 ; while (condition) …….. ; instructionp } …….. ; instructionp ;} for (initialisation ; test ; incrémentation) { instruction1 ; …….. ; instructionp ; } Exemple : <script language="javascript" > var i ; for(i=5 ; i<=10 ; i++) {document.write(i + "<br>")} </script> 7 Les fonctions (1) Déclaration function nomfonction(arg1, …, argn) { instruction1 ; …… instructionp ; return valeuraretourner ; } Ex : <head> <script type="text/javascript" > function salutation(){document.write("Bonjour!")} </script> </head> Appel : <body> Voici un résultat : <script>salutation()</script> </body> </html> ou <body>Voici un résultat: <a href="javascript:salutation()"> plus ?</a> </body> 8 Les fonctions (2) Portée des variables. Ex : <script language="javascript1.4"> var x=’dehors’ function essai() {var x=’dedans’ ; document.write(x) ;} document.write(x) ; essai() ; </script> Tableau des arguments : arguments[ ] function myConcat(separateur) {resultat="" ; // Initialisation de la boucle for (i=1; i<arguments.length ; i++) { resultat += arguments[i] + separateur } return resultat } Application : myConcat(", ","red","orange","blue") retourne "red, orange, blue, " 9 Événements (1) Evénement = • erreur de l'interpréteur Javascript • écoulement d'un laps de temps (minuterie) • action de l'utilisateur Détection par le navigateur Traitement par un gestionnaire d'événement : <nomBalise onEvénement = "code JS à exécuter" > 10 Événements (2) html> <head> <title>rollover</title> <body> <table bgcolor="#FF6600" align="center"> <tr> <td> <img src="image_1.gif" name="image1" border="0"></td> <td rowspan="2"><img src="image_defaut.gif" name="centrale"></td> <td> <img src="image_3.gif" name="image3" border="0"></td> </tr> <tr> <td> <img src="image_2_nb.gif" name="image2" border="0"></a></td> <td> <img src="image_4_nb.gif" name="image4" border="0"></a></td> </tr> </table> </body> </html> 11 Événements (2) <html> <head> <title>rollover</title> <script> function redim() {self.resizeTo(400, 200);}</script> </head> <body onload= redim()> <table bgcolor="#FF6600" align="center"> <tr> <td><a href="#" onClick="document.centrale.src='image_1G.gif'" onMouseOver=document.image1.src="image_1C.gif" onMouseOut=document.image1.src="image_1.gif"> Modèle événement : <img src="image_1.gif" name="image1" border="0"> • condition spéciale : clic </a></td> • attribut : onClick <td rowspan="2"><img src="image_defaut.gif" name="centrale"> </td> • script gestionnaire : " ... " ... • objet cible : document.centrale • contrôle donné à l'interpréteur • donnée d'accompagnement de l'événement : 12 image_1G.gif Objets (1) Définition : objet ≈ ensemble de propriétés et de méthodes Ex : function f_disbonjour() {document.write(" Bonjour, <br /> ") ;} déclaration var personne = new Object ; personne.nom = ‘dupont’ ; propriétés personne.age = 32 ; personne.disbonjour = f_disbonjour ; // Définition d'une méthode ... personne.disbonjour() // Appel de la méthode OU : var personne = {nom:'dupont', age:32, disbonjour:f_disbonjour 13 Objets (2) Constructeurs function Constructeur(valeur_Propriété_1, …., valeur_Propriété_n) { this.Propriété_1 = valeur_Propriété_1 …………….. this.Propriété_n = valeur_Propriété_n } Ex : function Employe(nom, age) {this.nom = nom ; this.age= age ;} définition du constructeur ... var personne1 = new Employe(‘Alain’,47) ; construction d'un objet 14 Objets (3) <html> <head> <script> // Constructeur de la "classe" Individu function Individu(nom, adresse) { this.nom = nom; this.adresse = adresse; this.afficher = f_afficherIndividu; } // fonction définissant la méthode afficher function f_afficherIndividu() { document.write(this.nom+" habite "+ this.adresse);} // Instanciation de deux objets Individu (as et mm) as = new Individu("Seigneur","rue Tabaga") ; mm = new Individu("LaMenace","Bd du crime"); </script></head> <body> // Appels des méthodes <script> as.afficher();</script> </body> </html> Seigneur habite rue Tabaga 15 Objets prédéfinis Boolean Ex : var x = new Boolean(false) ; 1 méthode : toString() Number Ex : var x = new Number(5) ; propriétés : MAX_VALUE,NaN,... Math 1 seul objet math intérêt : accès aux constantes et fonctions mathématiques : Ex : PI, sqr(), log()... → Math.PI, Math.log(2), Math.sqr(3) 16 Objets prédéfinis : Array Déclaration : tab = new Array(); OU tab = {element_1,...,element_n}; → Objets et tableaux sont interchangeables Ex : Tab = new Array() → Tab.x = 1 OU Tab[‘x’] = 1 Obj = new Object → Obj[‘x’]= 1 OU Obj.x = 1 Conséquence : parcours des propriétés d'un objet AS = new Individu("Seigneur","rue Tabaga") ; nom = Seigneur for (var i in AS) {document.write(i+"="+obj[i]+"<br />");} adresse = rue Tabaga Méthodes : concat(), join(), pop(), shift(), reverse(), sort() Propriété : length 17 Objets prédéfinis : String Méthodes pour l'affichage: bold() italics() sub() sup() fontcolor() fontsize() Ex1 : document.write(texte.fontsize(10)) Ex2 : document.write(texte.bold().fontsize(10)) Méthodes pour la manipulation : Ex: citation = "Eureka"; citation.charAt(4) = k citation.indexOf("ka") = 4 citation.indexOf("ki") = -1 citation.toLowerCase() ="eureka" citation.substring(1,4) + citation.charAt(5) = ureka citation.split("e") = { "ur", "ka"} 18 Objets prédéfinis : Date Ex : October 29, 2004, 09:00:00 Création : today = new Date() unJour = new Date(100000) PremierMai2005 = new Date(2005,4,1,9,18,37) PremierMai2005 = new Date("may, 2005, 1") Méthodes : Lecture d'éléments de la date : Ex : getDay() Modification d'éléments de la date : Ex : setHours() Conversion pour l'affichage : Ex : toLocaleString() ToGMTString() 19 Modèle objet navigateur (1) <html> <body> <form> <radio> etc 20 Modèle objet navigateur (2) Window Textarea Frame D o cument Location History Link Image Form Area ...... Text Submit Radio Button Select ................ Ex : désignation du 1er bouton radio du 1er formulaire : (window).document.form[0].radio[0]. OU, si form[0] défini par <form id="premier_formulaire"> : (window).document.premier_formulaire.radio[0]. 21 Modèle objet navigateur (3) : Objets navigator et screen Navigator : Propriétés : appName appVersion language platform ... Screen : Propriétés : top width height availWidth availHeight ... 22 L'objet document Window Frame Textarea Document Location History Link Image Form Area ...... Text Submit Radio Button Select ................ Propriétés : alinkColor linkColor vlinkColor bgColor fgColor lastModified title cookie location 23 L'objet document Méthodes : <html> <head> <script language="javascript"> function coucou() { var texte = "<html> <body> Salut ! </body> </html>" ; var win = open("","PageBlanche"); // ouverture page blanche win.document.open() ; // ouverture du flux d'affichage win.document.write(texte) ; // écriture du contenu win.document.close() ; // ferme le flux d'affichage } </script> </head> <body> <form> <input type="button" value="coucou" onclick="javascript:coucou()" /> </form> </body></html> 24 Le modèle objet document (DOM) DOM = représentation de l'objet document sous forme d'arbre → balises HTML et texte entre 2 balises = objets node Objectif : rendre chaque élément accessible (accessoirement, éviter les écritures du type : document.formulaire.liste.options[i].value ) Méthodes d'accès de l'objet document à ses nœuds : getElementById(), getElementsByName(), getElementsByTagName(), getSelection() 25 DOM / ex1 : modification d'attributs <html><head> <script type="text/javascript"> function aligner(comment) {document.getElementById("indecis").align =comment;} </script></head> <body> <h1 id="indecis">Où est donc ma place?</h1> <a href="javascript:aligner('left')">à gauche?</a><br> <a href="javascript:aligner('center')">au centre?</a><br> <a href="javascript:aligner('right')">à droite?</a><br> </body></html> 26 <body> <p id="letexte"> Ex2 DOM : accès aux noeuds enfants Texte avec <b> des caractères gras et <u> du texte souligné <html><body> <p id="letexte">Texte avec <b>des caractères gras</b> et <u>du texte souligné</u></p> <script type="text/javascript"> var nombre = document.getElementById("letexte").childNodes.length; var premier = document.getElementById("letexte").firstChild.nodeValue; var deuxieme = document.getElementById("letexte").childNodes[1].childNodes[0].nodeValue; document.write("Nombre de noeuds enfant: <b>" + nombre +"<\/b><br>") document.write("Valeur du premier noeud enfant: <b>" + premier +"<\/b><br>"); document.write("Valeur du fils deuxieme noeud enfant: <b>" + deuxieme +"<\/b><br>"); </script> </body></html> 27 Formulaires Ex : <body> <form name="formulaire"> <input type="text" name="un_champ_txt"> Accès au formulaire : document.form[0] OU document.formulaire Accès à un élément : document.formulaire.elements[0] OU document.formulaire.un_champ_txt Méthodes : submit() et reset() → événements onsubmit et onreset 28 Formulaires : champs input text, button, radio, checkbox, submit, reset Propriétés : name type value defaultvalue size maxlength checked disabled readOnly class style Méthodes : focus() et blur() → événements onfocus et onblur Ex : <html><head><script> function testerRadio(OperSys) {for (var i=0; i<OperSys.length;i++) {if (OperSys[i].checked) alert("Système = "+OperSys[i].value)}} </script> </head> <body> <form name="fo"> <input type="radio" name="os" value="Windows NT" />Windows NT <input type="radio" name="os" value="Linux" />Linux <input type="radio" name="os" value="Autre" />Autre <input type="button" value="Tester" OnClick="testerRadio(this.form.os)"> 29 </form> </body></html> Formulaires : champs select Propriétés de select : name Nom de la liste size Nombre de lignes à afficher multiple Sélection multiple autorisée disabled Grisage de la liste class Classe de feuille de style style Style de la liste selectedIndex indice de la ligne courante options tableau des options Propriétés de options : defaultSelected selected Propriétés de options[i] : option choisie par défaut option sélectionnée value Valeur d'une ligne text Libellé d'une ligne length Nombre de lignes Méthodes : add() remove() focus() blur() 30 Formulaires : champs select : ex <html><head> <script> function ajouter() { // création d'une nouvelle valeur d'option nouvel_element = new Option(document.formulaire.nouveau.value); // Positionnement de la nouvelle option à la fin de la liste document.formulaire.choix.options[document.formulaire.choix.length] = nouvel_element ; // Réinitialisation du champ texte document.formulaire.nouveau.value = ""; } </script></head> <body> <form name="formulaire" > <select name="choix" size="8"> <option>Un élément</option> </select> <p /> Entrer le nouvel élément à ajouter à la liste : <input type="text" name="nouveau"><br /> <input type="button" value="Ajouter" onClick="ajouter()"> </form> </body></html> 31 Les fenêtres : objet window Propriétés name status defaultStatus Evénements rattachés (à mettre dans la balise body) onload onunload onfocus onblur onresize Exemple <html> <head> <title>Test</title></head> <script> window.defaultStatus = "le statut par defaut" </script> <body> <input type="button" value="changer statut" onClick="window.status='le nouveau statut';return true"> </body></html> 32 Les fenêtres : méthodes de base focus() blur() moveBy(x,y) moveTo(x,y) resizeBy(x,y) resizeTo(x,y) back(), forward(), stop(), home() print() Ex : <html> <head> <script> function shake(n) { for (i = 10; i > 0; i--) {for (j = n; j > 0; j--) {self.moveBy(0,i); self.moveBy(i,0); self.moveBy(0,-i); self.moveBy(-i,0); } } } </script> </head> <body><form> <input type=button onClick="shake(10)" value="Secouez l'écran!"> </form> </body> </html> 33 Minuteries Méthodes de l'objet window : Déclenchement : setTimeout(nom_fonction, temps en ms) setInterval(chaine de la fonction, intervalle en ms) Arrêt : clearTimeout(nom_minuterie) clearInterval(nom_minuterie). Ex : <html><head<script> function Couleur() { if(couleur==1) { document.bgColor="yellow"; couleur=2; } else { document.bgColor="aqua"; couleur=1; } i = i + 1; if(i >= 10) window.clearInterval(actif) ; } </script </head> <body> <script> var actif = window.setInterval("Couleur()",1000); var i = 0, couleur = 1; </script></body></html> 34 Open() et close() Ouverture : fenetre = window.open(URL, nom_fenetre, options) Fermeture : fenetre.close() Ex : Fichier popup.html : <html> <body> fenêtre secondaire </body> </html> Fichier main.html : <html> <body> FENETRE PRINCIPALE<br /> avec ouverture d'une fenêtre secondaire <a href="javascript:win.close();"> Fermer le popup </a><br> <a href="#" onClick="win=open('popup.html','popup', 'resizable=no,width=200,height=200');"> Ouvrir le popup </a> </body> </html> 35 Multifenêtrage <html><head><script> function coucou_1() {return "<br> coucou produit par la 1ere fenetre<br>"} </script> </head> <body><script> win2=open('multiwin2.html','fenetre 2', 'width=400,height=300,left=300,top=200,alwaysraised=yes'); </script> <input type="button" value="action sur fenetre 2" onClick="win2.bonjour_2();"> </body> </html> 1ere fenêtre : multiwin1.html <html> <head> <script> function bonjour_2() {document.getElementById("bonjour").style.display='';} </script> </head> <body> <script> chaine = opener.coucou_1(); document.write(chaine); </script> <span id="bonjour" style="display:none"> Bonjour activé par la 1ere fenetre </span></body> </html> 2e fenêtre : multiwin2.html 36 Multifenêtrage Pour les frames : • accès aux cadres enfants par leurs noms • accès au cadre parent par parent • accès à la fenêtre principale par top 37 Boîtes de dialogue alert('Chaîne de caractères'); confirm('Chaîne de caractères'); retourne TRUE ou FALSE confirm('Chaîne', 'réponse par defaut); retourne la chaîne saisie 38 Sous-objets de l'objet window history location document Ex : <a href= « # » onclick= « window.history.go(-1) »> Pour revenir au contenu précédent </a> <a href= « # » onclick= « window.location.reload() »> Pour rafraîchir la page courante à partir de la mémoire cache </a> <a href= « # » onclick= « window.location.reload(true) »> Pour recharger la page à partir du site web distant </a> <a href= « # » onclick= « window.location.replace(url)»> Pour rafraîchir la page courante mais en effaçant l'historique (le bouton Back est désactivé) </a> 39 Les cookies Cookie = informations placées par une page web sur le disque de l'utilisateur et récupérées aux connexions suivantes Intérêt : • Faciliter navigation • Accélérer traitements Inconvénient : Utilisateur doit accepter accès à son disque 40 Structure d'un cookie Cookie défini par : • nom associé à 1 valeur • date = chaîne "Day, JJ-MM-AA HH-MM-SS GMT" • répertoire de validité • serveur de validité • attribut de sécurité si cookie autorisé uniquement pour https 41 tomate 2 ~~local~~/D:\donnees\Enseignement\LicPro\demos_C5\ 1088 3829776384 29683671 Création d'un cookie526890064 : 29672341 document.cookie *= "nom=valeur; expires=date; jambonpath=le_repertoire; domain=le_serveur; [secure]"; 3 ~~local~~/D:\donnees\Enseignement\LicPro\demos_C5\ 1088 Ex : 3829776384 document.cookie =29683671 "tomate=2;date=Sat, 01-Jan-2005 08:00:00 GMT"; document.cookie =791270064 "jambon=3;date=Sat, 01-Jan-2005 08:00:00 GMT"; 29672341 Fichier de cookies créé par IE, * identifié par domain et path Manipulation des cookies Accès aux cookies : les_cookies = document.cookie ; chaîne avec tout le contenu du fichier... 42 Fonctions de création et lecture var dateExp="Sat, 01-Jan-2005 08:00:00 GMT"; // date d'expiration function newCookie(name,value) { document.cookie=name+"="+value+";expires="+dateExp+"secure";} function getCookie(nomCookie) { var cookieTrouve=false; var debut=0; var fin=0; var ch=document.cookie; var i=0; while (i<=ch.length && !cookieTrouve) { debut=i; fin=debut+nomCookie.length; if (ch.substring(debut,fin)==nomCookie) {cookieTrouve=true;} i++; } if (cookieTrouve) { debut=fin+1; fin=document.cookie.indexOf(";",debut); if(fin<debut) fin=document.cookie.length; return document.cookie.substring(debut,fin); } return ""; } 43 Ex d'utilisation d'un cookie <html><head><script LANGUAGE="JavaScript"> function recFavoritePage() { var URL=this.location.href ; //URL de la page en cours newCookie('Favorite',URL); //mémorisation dans le cookie 'Favorite' } </script></head> <body> Une page du site<br> <a href="javascript:recFavoritePage()"> Cliquez-ici si cette page est votre favorite</a></body><html> <html><head><script LANGUAGE="JavaScript"> function goFavoritePage() {var URL=getCookie('Favorite'); //URL de la page favorite if (URL!=""){document.location.href=URL ; //Saut vers cette page} } </script> </head> <body> La page d'accueil <br> <a href="page1.html"> page 1 </a> <br> ... <a href="pageN.html"> page N </a> <br> <a href="javascript:goFavoritePage()"> Votre page favorite</a></body><html> 44