• Aucun résultat trouvé

INF344 – Données du Web Javascript et contenus dynamiques côté client

N/A
N/A
Protected

Academic year: 2022

Partager "INF344 – Données du Web Javascript et contenus dynamiques côté client"

Copied!
34
0
0

Texte intégral

(1)

INF344 – Données du Web

Javascript et contenus dynamiques côté client

Antoine Amarilli 3 mai 2018

(2)

Motivation

• Avoir un comportement dynamiquecôté client, sans interagir avec le serveur

• Cas simples: validation de formulaire, ouverture de menus...

pour aller au-delà de ce que permettent HTML et CSS

par compatibilité avec les vieux navigateurs

ou, il y a quelques années, par nécessité

• Cas complexes: écrire des applications complètes pour le navigateur pour remplacer les applications client

• Solutionla plus répandue: langageJavaScript(ECMAScript)

Attention, rien à voir avecJava!

• Autres technologiesanciennes : Flash, Java, Silverlight, etc.

(3)

Table des matières

Introduction

Le langage JavaScript

JavaScript et HTML AJAX

jQuery

Autres technologies

(4)

Langage JavaScript

• ECMAScript: nom du standard (ECMA-262, 2011, 258 pages)

• JavaScript est un langage de programmationcomplet!

• Langageinterprété(a priori), haut niveau

• Typagedynamique

Typage à l’exécution

Typage des valeurs et non des variables

Très (trop) grande flexibilité pour les conversions implicites

• Fonctionevalpour évaluer du code dynamiquement

(5)

Langage JavaScript (suite)

• Langageorienté objet, maisprototypes(objets existants clonés) plutôt que des classes

• Fonctions depremière classe(fonctions anonymes, clôtures ; les fonctions sont aussi des objets)

• Support desexceptions

• Syntaxe objet:

foo.apour le membreade l’objetfoo

foo.b(arg)pour appeler la méthode (fonction)bdefooavec l’argumentarg

(6)

Exemple de JavaScript

function factorial(n) { if (n === 0) {

return 1;

}

return n * factorial(n - 1);

}

(7)

Implémentations de JavaScript

IE Chakra, propriétaire, depuis IE9 Firefox SpiderMonkey, libre, depuis 1996 Chrome V8, lancé avec Chrome en 2008

→ Utilisé aussi par Opera et Node.js Safari JavaScriptCore, renommé en Nitro (2008)

→ Champ actif de recherche pour améliorer laperformance!

→ Compilationà la volée; pas seulement interprété

→ Sous-ensembles limités de JavaScript optimisés agressivement (asm.js, WebAssembly) et utilisables comme cible de

compilation

(8)

Table des matières

Introduction

Le langage JavaScript JavaScript et HTML

AJAX jQuery

Autres technologies

(9)

Intégrer JavaScript à HTML

• Un peu commeCSS:

<head>

<script src="script.js" type="text/javascript">

</script>

</head>

• Dépendance externe, et risque desécuritéavec codes tiers !

• Possibilité de mettre le codedirectementdans<script>

• Événementscommeonclick(voir plus tard)

• Aussi,liensenjavascript:

→ Attention : tous les navigateurs ne supportent pas JavaScript !

En particulier pas les navigateurs textuels et robots

→ Préférable que le site soitutilisable sans, si c’est possible

(10)

Document Object Model

<html lang="fr">

<head>

<title>Titre</title>

</head>

<body>

<p>

Ma jolie page.

</p>

</body>

</html>

html

body p Ma jolie page.

head title

Titre

@lang fr

(11)

Objetdocument

L’objetdocumentreprésente le documentcourant

document.documentElement Renvoie le nœudracine

document.getElementById("foo") Renvoie le nœud portant l’attributid="foo"(ounullsi aucun)

document.getElementByTagName("p") Renvoie un tableau des nœuds qui sont des éléments<p>

(12)

ObjetsNode: bases

Les objetsNodereprésentent desnœudsdu DOM

node.nodeName Nom de l’élément (BODY...) ou de l’attribut node.nodeType Type, commeNode.ELEMENT_NODE, aussiTEXT,

ATTRIBUTE,COMMENT...

node.nodeValue Valeur des nœuds texte et attribut (aussi : node.setAttribute("nom", "valeur")et node.getAttribute("nom"))

node.className La classe du nœud

node.style Le style CSS, avec les différentes propriétés (remplacer les tirets par ducamelCase). Par exemple :

node.style.borderStyle = "solid"

(13)

ObjetsNode: parcours

node.parentNode Le nœud parent

node.childNodes Tableau des nœuds enfants (ounullsi aucun) node.appendChild(child) Ajoute un enfant (en dernier)

node.removeChild(child) Retire un enfant

node.cloneNode(true) Clone le nœud et ses descendants :

• Le nœud cloné n’est pas encore dans le document

• Attention aux ‘id‘ en double !

node.cloneNode(false) Clone le nœud (pas ses descendants) node.innerHTML Représentation HTML du contenu du nœud

(14)

Objetwindow

Par défaut, lesméthodesdewindowsont accessibles directement : alert("x") Boîte de dialogue indiquant"x"

back() Navigue vers la page précédente

a = open("URL", "name") Ouvre une fenêtre (ou onglet) sur"URL"

avec le nom"name",a.close()pour fermer confirm("Confirmer ?") Dialogue de confirmation indiquant

"Confirmer ?"(voir la valeur de retour)

prompt("Valeur ?", "défaut") Prompt indiquant"Valeur"et prérempli par"défaut"(voir la valeur de retour) t = setTimeout("f()", 42000) Appelerf()dans 42 secondes.

Annuler :clearTimeout(t). Utile pour l’exécution périodique, les animations...

Lesvariables globalessont desmembresdewindow

(15)

Événements

• Attributonfoobar="return f(this)"surx:

Lorsquefoobarsurvient sur l’élémentx, appellef(x)

• Nombreux événements. Les plus utiles :

onclick Lorsqu’un clic survient ; retourner faux annule onchange Lorsque le contenu d’un champ change

onfocus Lorsqu’un élément est sélectionné onblur Lorsqu’un élément est désélectionné onsubmit Lorsqu’un<form>est soumis ; annulable

onload Sur<body>, lorsque la page s’est chargée ondblclick Lorsqu’un double-clic survient

onmouseover Lorsque l’élément est survolé

onresize Lorsque la fenêtre est redimensionnée onselect Sur<input>, lorsque du texte est sélectionné

(16)

Exemple : validation de formulaire

function vrf() {

v1 = document.getElementById("mdp1").value;

v2 = document.getElementById("mdp2").value;

if (v1 != v2) {

window.alert("Erreur de saisie !");

return false;

} }

<form action="test.php" method="post" onsubmit="return vrf()">

<input type="text" name="nom" placeholder="Nom" required><br>

<input type="password" name="mdp1" id="mdp1"

placeholder="Mot de passe" required><br>

<input type="password" name="mdp2" id="mdp2"

placeholder="Retaper le mot de passe" required><br>

<input type="submit">

(17)

Table des matières

Introduction

Le langage JavaScript JavaScript et HTML AJAX

jQuery

Autres technologies

(18)

Requêtes asynchrones

• JavaScript peut aussi faire desrequêtes HTTP

• AJAX: Asynchronous JavaScript And XML

• Échanger avec leserveursans charger une nouvelle page

• Asynchrone: les requêtes ne bloquent pas JavaScript

• Introduit dansInternet Explorer 5en 1999, standardisé par le W3C (Working Draft, 2012)

• Problèmes desécurité:

Same-origin policy: pas possible de faire de requêtes à un autre domaine (sinon, danger !)

• Mécanismes pourautorisationsau cas par cas :

Entreclients, cross-document messaging (postMessage)

Avec leserveur: Cross-Origin Resource Sharing

(19)

ExempleXMLHttpRequest

// Attention, non compatible avec vieilles versions de IE var req = new XMLHttpRequest();

req.onreadystatechange = function() {

if (req.readyState === 4) { // est-ce prêt ? if (req.status === 200) { // est-ce bon ?

window.alert("Obtenu : " + req.responseText);

} else {

window.alert("Problème avec la requête");

} } }

// true pour être asynchrone, t pour éviter le cache var t = new Date().getTime();

req.open("GET", "data.xml?t=" + t, true);

// peut fournir du contenu en POST (à encoder soi-même) req.send(null);

(20)

XML

• Généralement, on récupère non pas une page Web mais du contenusérialisédestiné au programme (Web API)

• Le code JavaScript se chargera detraiterla réponse

• À l’origine, AJAX se fait avecXML, qui est le langage générique qui ressemble à HTML

<?xml version="1.0" ?>

<etat>

<date>2013-10-03</date>

<time>13:37</time>

<load>0.2</load>

<speed>1337 RPM</speed>

</etat>

(21)

Exemple de traitement XML

var doc = req.responseXML;

var load = doc.getElementsByTagName(

"load").item(0).firstChild.data;

var speed = doc.getElementsByTagName(

"speed").item(0).firstChild.data;

document.getElementById("load").textContent = load;

document.getElementById("speed").textContent = speed;

(22)

JSON

• Formatalternatifplus récent

• Normalisé (RFC 4627, 2006, 11 pages)

• Plussimple, plusléger, plus proche de JavaScript

• Types de base: nombres, booléens, chaînes,null

• Types complexes: listes et dictionnaires

(23)

Exemple JSON

{

"date": "2013-10-03",

"time": "13:37",

"load": "0.2",

"speed": "1337 RPM"

}

var json = JSON.parse(req.responseText);

document.getElementById("load").textContent = json.load;

document.getElementById("speed").textContent = json.speed;

(24)

Communication push

• Si onattendun événement du serveur, comment faire ? HTTP Non supporté par le protocole

TCP Impossible : NAT, firewalls...

Polling Demander régulièrement une mise à jour

Gaspillage de ressources !

Comet Ouvrir régulièrement des requêtes, le serveur attend le prochain événement pour répondre

Peu efficace, un peu fragile, pas très élégant WebSocket IETF, RFC 6455, 2011

Server-Sent Events Draft W3C, 2013, toujours pas dans IE

→ WebSocket supporté partoussauf OperaMini

Upgradela connection HTTP vers du bidirectionnel

• Compliqué : proxys HTTP, caches...

(25)

Table des matières

Introduction

Le langage JavaScript JavaScript et HTML AJAX

jQuery

Autres technologies

(26)

jQuery

• Lancé en2006

• Environ80 kilo-octets(version 2 ou 3)

• Gratuitetlibre(MIT)

• Utilisé par>70%des 10 millions de sites les plus visités.1

• Simplifiel’écriture de JavaScript

• Couche d’abstractionau-dessus des spécificités des différents navigateurs

1.

(27)

Exemple jQuery

<script type="text/javascript" src="jquery-1.10.2.min.js">

</script>

<script type="text/javascript">

$.ajax({

url: "data.json", cache: false,

success: function (data) {

$( "#load" ).html( data.load );

$( "#speed" ).html( data.speed );

} });

</script>

(28)

Table des matières

Introduction

Le langage JavaScript JavaScript et HTML AJAX

jQuery

Autres technologies

(29)

Flash

• Lancé en1996par Macromedia

• Longtemps leseul moyen(avec Java, cf. après) d’avoir des sons, vidéos, jeux interactifs, etc., dans le navigateur

• Certains sitesuniquementen Flash (heureusement rare) : accessibilité, indexation ?

• Aussi utilisé pour desdessins animés, voire desjeuxsur PC

• Utilisé par7%des 10 millions de sites les plus populaires2

• Support estimé en 2012 :95 à 99%des clientssur ordinateur3 mais en train de disparaître

• Utile pour les vieux navigateurs sans support HTML5 (<video>...)

2. https://w3techs.com/technologies/overview/client_side_language/all 3. Source :The Tangled Web, chapitre 8, 2012

(30)

Inconvénients de Flash

• Environnement de développementpayant(Aussi :Haxe)

• Client officielgratuit mais propriétaire, Windows et MacOS

• Fourniavec Chromesous GNU/Linux

• Autres navigateurs sous GNU/Linux : plug-inpérimé

• Support GNU/Linux toujours demauvaise qualité

• Format peu documenté, pas d’implémentationlibrefonctionnelle

• Historiquement, nombreusesfaillesde sécurité du client...

• Nettementmoins crucialdepuis HTML5 et consorts

• Très peu de supportsur mobile, disparaît sur ordinateur

(31)

Java

• Java : Langage de programmationorienté objet, compilé vers une machine virtuelle, utilisée pour desapplications complètes.

• Possibilité de faire tourner desapplications Javadans une zone de taille fixe dans une page HTML, depuis 1995

• Bac à sable: par défaut, l’application ne peut pas faire n’importe quoi (contenu du disque dur, micro...)

• Historiquementpopulaire sur les mobiles

• Pas de supportdes applets sur smartphone

• Utilisé par<0.1%des 10 millions de sites les plus populaires.4

• Support estimé en 2012 :80%des utilisateurs.5

4. https://w3techs.com/technologies/details/cp-javaruntime/all/all 5. Source :The Tangled Web, chapitre 8, 2012

(32)

Microsoft

VBScript Antiquité, concurrent malheureux de JavaScript ActiveX Lancé en 1996.WindowsetIEseulement (en gros).

Failles.Désactivé par défautdepuis IE 9.

XBAP Obscur équivalent Microsoft .NET des applications Java.

Échec,désactivé par défautdepuis IE 9 Silverlight Alternative à Flash, lancée en 2006, dépréciée

(33)

Nouveautés

<canvas> Région de la page dans où on peutdessineravec JavaScript Pas vectoriel. Utile pour lesjeux vidéo(à la place de Flash)

SVG+JS Manipulation de graphiquesvectorielsen JavaScript WebGL API JavaScript pour faire de la3Daccélérée par la carte

graphique. Expérimental... Risques de sécurité ? NaCl Google Native Client, exécution decode natifdans le

navigateur avec bac à sable (peu répandu, Chrome uniquement)

WebRTC Communications vocales et vidéo entre navigateurs Hors-ligne Applications Web utilisables hors ligne

(34)

Crédits

• Matériel de cours inspiré de notes par Pierre Senellart

• Merci à Pablo Rauzy et à Pierre Senellart pour leur relecture

Références

Documents relatifs

Langages côté serveur Bases de données Frameworks Aspects

Serveur Web de 54.246.205.67 : Voici la page Web demandée Mon navigateur : Cette page appelle d’autres ressources :!. • D’autres scripts et images sur le

Langages côté serveur Bases de données Frameworks Aspects pratiques.. Comment se faire héberger un

Serveur Web de 54.246.205.67 : Voici la page Web demandée Mon navigateur : Cette page appelle d’autres ressources :.. • D’autres scripts et images sur le

Possibilité de faire tourner des applications Java dans une zone de taille fixe dans une page HTML, depuis 1995. Bac à sable : par défaut, l’application ne peut pas faire

• Compositing: applying styles, interactivity (scripting), animations, synchronizing media elements … to produce static data to be rendered. • Rendering of

onselect se produit lorsque l’utilisateur sélectionne un texte (ou une partie d’un texte) dans un champ de type &#34;text&#34;

La licence confère à l’utilisateur un droit d’usage sur le document consulté ou téléchargé, totalement ou en partie, dans les conditions définies ci-après et à