Programmation client web cours 8 : javascript et applet

publicité
Programmation client web
cours 8 : javascript et applet
Plan
✦
✦
✦
✦
✦
✦
Modèles de programmation via le service Web
Protocole HTTP
HTML
● BALISES
Cascading Style Sheet
Javascript
Applet java
IPW : programmation côté client
2
Charger un ficher de code JavaScript
✦
<SCRIPT type= "text/javascript" SRC= "source.js " > </SCRIPT>
IPW : programmation côté client
3
DOM
✦
✦
✦
✦
✦
✦
✦
DOM est un acronyme pour Document Object Model. C'est une API
(application programming interface) pour du html et xml valide.
En suivant le DOM, les programmeurs peuvent construire des documents,
naviguer dedans, ajouter, modifier ou effacer des éléments à ces
documents.
En tant que recommandation du W3C, l'objectif du DOM est de fournir une
interface de programmation standard pour être utilisée par tous
(applications, OS).
Suivant le DOM, un document a une structure logique d'arbre (ou de forêt).
Le nom DOM provient de l'approche retenue par le W3C : une approche
proche des modèles objets (propriétés, méthodes, description).
Le DOM a pour but d'uniformiser la manipulation des documents "web",
notamment par les scripts.
c.f. ECMAscript (une sorte de standardisation de javascript).
IPW : programmation côté client
4
Quelques éléments du DOM
✦
✦
✦
document
● Element createElement(in DOMString tagName)
● NodeList getElementsByTagName(in DOMString tagname)
● Element getElementById(in DOMString elementId)
Document HTML (hérite de document)
● title : titre de la page
● referrer, domain, URL
● body
● images, applets, links, forms, anchors, cookie [des collections]
● write(), writeln()
NodeList
● length
● item(index)
IPW : programmation côté client
5
Quelques éléments du DOM
✦
✦
✦
node
● nodeName, nodeValue, nodeType , parentNode
● childNodes [une NodeList]
● insertBefore(newChild, refChild) , replaceChild(newChild, oldChild),
appendChild(newChild) , removeChild(oldChild)
element
● tagName
Element html
● id
● title
● lang
● dir
● className [class CSS]
IPW : programmation côté client
6
Animation
✦
✦
Animation
● comptes à rebours : setTimeout
◆ la fonction setTimeout prend deux paramètres : en premier des instructions (entre "",
séparées par des ';') (qui peuvent être un appel de fonction) et en second un délai en
milisecondes. Ce délai est le temps à attendre avant l'exécution des instructions
passer en premier paramètre.
● déclenchement périodique : setInterval
◆ setInterval fonctionne comme setTimeout, à la différence que les instructions
passées en premier paramètre sont exécutées périodiquement (toutes les délai
milisecondes).
● stoper une minuterie : clearInterval
◆ la fonction "clearInterval" permet de stopper un déclenchement périodique. Pour ce
faire, il faut concerver un pointeur sur le retour de setInterval et de le passer en
paramètre de la fonction clearInterval.
◆ exemple : var inter = setInterval("alert('p\u00e9riode de 3 secondes');", 3000);...
clearInterval(inter);
● exemple-cours8/anim-navconv.html
exemple-cours7/defil.html
IPW : programmation côté client
7
DHTML
✦
✦
Si on en croit la définition sur le site Jargon Français :
Dynamic HyperText Markup Language. HTML dynamique, ayant été présenté sous
diverses formes au fil du temps : d'abord un simple "Server Side Include" vous
qualifiait pour un expert du DHTML, puis ce fut du HTML 4, utilisant les CSS (feuilles
de style). Désormais, on ne sait plus trop ce que c'est, mais le principe est qu'un
client puisse modifier une page sans faire appel au serveur.
Une autre définition, la définition du site comment ça marche :
Le DHTML (Dynamic HyperText Markup Language) n'est pas à proprement parler un
langage de balises pour Internet, il n'existe d'ailleurs aucune norme DHTML à part
entière. En réalité, le DHTML est un ensemble de technologies Internet associées
afin de fournir des pages HTML plus interactives, c'est-à-dire dont le contenu peut
être modifié grâce à des événements (mouvements de la souris, survol d'un objet par
le curseur, ...) après le chargement de la page.
Les technologies que le DHTML met en oeuvre sont:
* Le HTML, nécessaire pour présenter le document ;
* Les feuilles de style (CSS), permettant de définir un style pour plusieurs objets et le
positionnement de ceux-ci sur la page ;
* Le modèle objet de document (DOM), proposant une hiérarchie d'objets, afin de
faciliter leur manipulation ;
* Le Javascript, un petit langage de script essentiel pour définir des événements
utilisateur ;
IPW : programmation côté client
8
Menu
✦
✦
css pur : exemple-cours8/menucss.html
● exemple-cours8/menudyn.css
● Différents problèmes
Css et javascript
● exemple-cours8/menu_tab.html
● À plusieurs niveaux : exemple-cours8/menu_tab_v2.html
IPW : programmation côté client
9
Animation (2)
✦
Plusieurs solutions :
● Jeux avec style : problème avec ie (setAttribute() et propriété style non
opérationnelle)
◆ exemple-cours8/anim_attrib.html
● Jeux avec des classes css : il faut générer les css…
◆ exemple-cours8/anim_classcss.html
● Jeux sur le texte
◆ exemple-cours8/anim_text.html
IPW : programmation côté client
10
Cookie
✦
✦
✦
Un nom et une valeur (nom=valeur)
● Le nom permet d'identifier le cookie. Sa valeur est un texte qui constitue le contenu du cookie.
Une date d'expiration (expires=date-au-format-GMT)
● Au format GMT (ex: Tue, 31-Dec-2002 08:00:00 GMT), elle est facultative. Si elle est omise, le
cookie "meurt" à la fin de la session en cours du navigateur. Si elle est spécifiée on parle d'un
"cookie persistant".
Un chemin d'accès (path=chemin-d-accès)
● Il indique la partie de l'URL pour laquelle le cookie est valable. Une page HTML pourra lire les
cookies de ses sur-répertoires jusqu'à la racine du site:
◆ ex: http://www.domaine.com/repertoire/index.htm lira les cookies des répertoires
http://www.domaine.com/ et http://www.domaine.com/repertoire/
◆ En revanche, elle ne pourra pas lire les cookies de ses sous-répertoires:
ex: http://www.domaine.com/index.php ne pourra pas lire les cookies du répertoire
http://www.domaine.com/repertoire/
● Pour qu'un cookie soit accessible depuis tous les répertoires d'un site, il faudra donc spécifier
path="/".
● Enfin, si le chemin d'accès est omis, il prendra la valeur par défaut du chemin de la page HTML qui
écrit le cookie, ce qui est dans bien des cas suffisant.
IPW : programmation côté client
11
Cookie
✦
✦
Un domaine de validité (domain=domaine-de-validité)
● Il indique le serveur pour lequel le cookie est valable (ex: www.domaine.com).
S'il n'est pas spécifié il prend la valeur par défaut du domaine de la page HTML
qui écrit le cookie, ce qui est, dans la grande majorité des cas, l'effet recherché.
Pour des raisons de sécurité, il ne semble cependant pas possible qu'un site web
place des cookies qui seront relus par un autre site.
Un attribut de sécurité (secure):
● S'il existe, le cookie ne sera transmis que si la connexion vers le serveur est
sécurisée (protocole HTTPS et non HTTP).
IPW : programmation côté client
12
Cookie
✦
✦
✦
cookie.html
● <body onload="initPage();" onunload="savePage();">
cookie.js
● document.cookie
● setCookie
● getCookie
● deleteCookie
loadandsave.js
IPW : programmation côté client
13
Changement de feuille de style
✦
✦
✦
✦
✦
Sur une page… exemple-cours8/changement.html
● Comment je sais qu’il faut utiliser disabled ?
◆ www.w3.org/TR/DOM2-HTML/ecma-script-binding.html
● Que ce passe-t-il si je recharge ?
● Plus de dynamique avec setAttribute… mais ne fonctionne pas avec ie
Utilisation des cookies…
● exemple-cours8/change_cookie.html
● Et si je ne suis pas attentif…
Partage d’un cookie
● exemple-cours8/change_cookie_v2.html et autre_page.html
Utilisation d’un formulaire (méthode get)
● exemple-cours8/change_cookie_v3.html et form.html
Notons la difficulté de la barre de navigation
IPW : programmation côté client
14
Plan
✦
✦
✦
✦
✦
✦
Modèles de programmation via le service Web
Protocole HTTP
HTML
● BALISES
Cascading Style Sheet
Javascript
Applet java
IPW : programmation côté client
15
Applet
✦
✦
✦
Balise object ou applet
● exemple-cours4/applet  exemple-cours8/applet
Question de sécurité
● Pas d’écriture ou lecture sur le disque du client
● Seule connexion possible : le serveur d’origine
● Ne peut pas exécuter de programme chez le client
● Ne peut pas lire certaines propriétés système (ex : "java.class.path",
"java.home", "user.dir", etc.)
● Les fenêtres créées peuvent avoir un message d’avertissement
Interface Java standard
● Component / Container / JComponent
● Événements
IPW : programmation côté client
16
Applet
✦
✦
✦
✦
Utilisation de l’API d’applet
● Tutorial java : java.sun.com
● Méthodes
◆ init() : appeler automatiquement lors de l’initialisation
◆ destroy() : appeler lors de la destruction de l’applet (libération de ressource)
◆ start() : appeler juste après init et lors de chaque retour sur la page
◆ stop() : appeler juste avant destroy et lors de changement de page web
Retrouver un fichier (sur le serveur)
● Limiter à l’url de l’applet
● Image image = getImage(getCodeBase(), "imgDir/a.gif");
Afficher un message dans la barre de status
● showStatus("MyApplet: Loading image file " + file);
Changer de page web
● public void showDocument(java.net.URL url)
● public void showDocument(java.net.URL url, String targetWindow)
◆ "_blank" (nouvelle fenêtre),"windowName" (dans une fenêtre du même nom, créée au besoin),
"self" (dans la même fenêtre ou frame), "_parent", "_top"
● deployment/applet/browser.html
IPW : programmation côté client
17
Applet
✦
✦
✦
Communication possible entre applets de la même page
Jouer des sons
● onceClip = applet.getAudioClip(getCodeBase(), "bark.au");
● onceClip.play(); //Play it once.
● onceClip.loop(); //Start the sound loop.
● onceClip.stop(); //Stop the sound loop.
Récupérer des paramètres
● public String getParameter(String name)
◆ Non sensible à la casse
◆ Retourne la valeur contenue dans la balise HTML tag.
– <applet code="Clock" width=50 height=50> <param name=Color
value="blue"> </applet>
◆ getParameter("Color") retourne la valeur "blue".
IPW : programmation côté client
18
Téléchargement