INFO4007 - aquadie

Transcription

INFO4007 - aquadie
Hiver 2014
—————————————————————————————————————————————–
INFO4007
S. C. T ECHNOLOGIE
DE L’ INFOROUTE
Éric Hervet
Université de Moncton
Faculté des sciences
Département d’informatique
Moncton, N.-B., CANADA
E1A 3E9
Table des matières
I.
HTML/CSS/JavaScript . . . . . . . . . . . . . . . . . . .
I.1.
W3C & évolution . . . . . . . . . . . . . . . . . . .
I.2.
Syntaxe HTML, encodages, types MIME . . . .
I.3.
Styles CSS . . . . . . . . . . . . . . . . . . . . . .
I.4.
Rappels JavaScript . . . . . . . . . . . . . . . . .
I.5.
Protocole HTTP . . . . . . . . . . . . . . . . . . .
II. Licences . . . . . . . . . . . . . . . . . . . . . . . . . . . .
III. Navigateurs web . . . . . . . . . . . . . . . . . . . . . . .
III.1. Navigateurs, moteurs de rendu . . . . . . . . . .
III.2. Téléphones intelligents, tablettes . . . . . . . . .
III.3. Bibliothèques de détection et de modernisation
III.4. Frameworks HTML . . . . . . . . . . . . . . . . .
III.5. Outils de développement . . . . . . . . . . . . . .
IV. Éléments & attributs . . . . . . . . . . . . . . . . . . . .
IV.1. Modèles de contenu . . . . . . . . . . . . . . . . .
IV.2. Doctype . . . . . . . . . . . . . . . . . . . . . . . .
IV.3. Éléments (balises) . . . . . . . . . . . . . . . . . .
IV.4. Attributs HTML globaux . . . . . . . . . . . . . .
IV.5. Relations des liens . . . . . . . . . . . . . . . . .
IV.6. Attributs événements . . . . . . . . . . . . . . . .
V. Formulaire . . . . . . . . . . . . . . . . . . . . . . . . . .
V.1. <input> et variantes . . . . . . . . . . . . . . . .
V.2. Autres éléments . . . . . . . . . . . . . . . . . . .
V.3. Validation des données . . . . . . . . . . . . . . .
VI. Microformats . . . . . . . . . . . . . . . . . . . . . . . . .
VI.1. Web sémantique . . . . . . . . . . . . . . . . . . .
VI.2. API DOM Microdata . . . . . . . . . . . . . . . .
VII. Audio & Vidéo . . . . . . . . . . . . . . . . . . . . . . . .
VII.1. Conteneurs, codecs, licences et support . . . . .
VII.1.1. Vidéo . . . . . . . . . . . . . . . . . . . .
VII.1.2. Audio . . . . . . . . . . . . . . . . . . . .
VII.2. Outils d’encodage et de conversion . . . . . . . .
VII.3. Balises média & attributs . . . . . . . . . . . . .
VII.4. Interface de contrôle et événements . . . . . . .
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
4
8
9
10
13
14
14
14
15
16
17
21
21
21
22
38
40
41
45
45
46
47
48
48
48
49
49
50
55
59
59
62
VII.5. Prise en charge par les navigateurs . .
VIII.HTML5 Canvas . . . . . . . . . . . . . . . . . .
VIII.1. Élément <canvas> . . . . . . . . . . . . .
VIII.2. Formes géométriques . . . . . . . . . . .
VIII.3. Chemins . . . . . . . . . . . . . . . . . . .
VIII.4. Styles, remplissages, couleurs . . . . . .
VIII.5. Dégradés . . . . . . . . . . . . . . . . . .
VIII.6. Transformations . . . . . . . . . . . . . .
VIII.7. Images . . . . . . . . . . . . . . . . . . . .
VIII.8. Pixels . . . . . . . . . . . . . . . . . . . .
VIII.9. Texte . . . . . . . . . . . . . . . . . . . . .
VIII.10.Ombrages . . . . . . . . . . . . . . . . . .
VIII.11.Transparence, composition & masques
VIII.12.Contrôle clavier & souris . . . . . . . . .
VIII.13.Animation et jeux . . . . . . . . . . . . .
VIII.14.3D : WebGL . . . . . . . . . . . . . . . . .
VIII.15.Graphisme vectoriel : SVG . . . . . . . .
IX. Géolocalisation . . . . . . . . . . . . . . . . . . .
IX.1. Principe . . . . . . . . . . . . . . . . . . .
IX.2. Technique . . . . . . . . . . . . . . . . . .
X. File API . . . . . . . . . . . . . . . . . . . . . . .
X.1. Principe . . . . . . . . . . . . . . . . . . .
X.2. Fonctionnement . . . . . . . . . . . . . .
X.3. Lecture avec FileReader . . . . . . . . .
X.4. Upload simple avec PHP . . . . . . . . .
X.5. Upload avec XMLHttpRequest2 . . . . .
XI. Drag & Drop . . . . . . . . . . . . . . . . . . . .
XI.1. Principe . . . . . . . . . . . . . . . . . . .
XI.2. Événements et attributs . . . . . . . . .
XI.3. Glisser (Drag) . . . . . . . . . . . . . . .
XI.4. Déposer (Drop) . . . . . . . . . . . . . . .
XI.5. Interface DataTransfer . . . . . . . . . .
XI.6. Glisser-déposer de fichiers . . . . . . . .
XI.7. Prise en charge . . . . . . . . . . . . . . .
XII. Événements “Push” . . . . . . . . . . . . . . . .
XII.1. Principe . . . . . . . . . . . . . . . . . . .
XII.2. Technique . . . . . . . . . . . . . . . . . .
XIII.JavaScript . . . . . . . . . . . . . . . . . . . . . .
XIII.1. Bases du langage . . . . . . . . . . . . .
XIII.2. Méthodes de sélection DOM . . . . . . .
XIII.3. Propriétés et méthodes DOM . . . . . .
XIII.4. Manipulation DOM . . . . . . . . . . . .
XIII.5. Méthodes pour formulaires . . . . . . .
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
63
63
64
64
64
64
64
64
64
64
64
64
64
64
64
65
66
66
67
69
69
69
70
71
71
72
72
72
73
73
74
75
75
76
76
76
78
78
79
80
81
82
XIII.6. Gestionnaire d’événements . . . . . . . . . .
XIII.7. matchMedia() et Media Queries . . . . . . .
XIV. Web Sockets . . . . . . . . . . . . . . . . . . . . . . . .
XIV.1. Protocole commun . . . . . . . . . . . . . . . .
XIV.2. Librairies alternatives . . . . . . . . . . . . .
XV. Web Storage . . . . . . . . . . . . . . . . . . . . . . . .
XV.1. Deux espaces de stockage . . . . . . . . . . .
XV.2. Interface Storage . . . . . . . . . . . . . . . .
XV.3. Utilisation de JSON . . . . . . . . . . . . . . .
XV.4. Stocker un événement . . . . . . . . . . . . .
XVI. Bases de données . . . . . . . . . . . . . . . . . . . . .
XVI.1. Indexed Database . . . . . . . . . . . . . . . .
XVII.CSS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XVII.1.Sélecteurs . . . . . . . . . . . . . . . . . . . . .
XVII.2.Propriétés . . . . . . . . . . . . . . . . . . . . .
XVII.3.Pseudo-classes et pseudo-éléments . . . . . .
XVII.4.Règles @ . . . . . . . . . . . . . . . . . . . . . .
XVII.5.Media Queries . . . . . . . . . . . . . . . . . .
XVIII.
Animations CSS3 . . . . . . . . . . . . . . . . . . . .
XIX. Frameworks CSS3 . . . . . . . . . . . . . . . . . . . .
XX. jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . .
XX.1. Présentation . . . . . . . . . . . . . . . . . . .
XX.2. Exemple « Hello World » . . . . . . . . . . . .
XX.3. jQuery et Web Storage . . . . . . . . . . . . .
XX.4. Modification du DOM . . . . . . . . . . . . . .
XX.5. Navigation dans le DOM . . . . . . . . . . . .
XX.6. Gestion des clics . . . . . . . . . . . . . . . . .
XX.7. DOM Traversals . . . . . . . . . . . . . . . . .
XX.8. Chaînage de fonctions jQuery . . . . . . . . .
XX.9. Géolocalisation . . . . . . . . . . . . . . . . . .
XX.10. ACCÉLÉROMÈTRE ! . . . . . . . . . . . . . .
XXI. Animation CSS3 & jQuery . . . . . . . . . . . . . . .
XXII.Contrôles jQuery . . . . . . . . . . . . . . . . . . . . .
XXIII.
jQuery Mobile . . . . . . . . . . . . . . . . . . . . . . .
XXIII.1.
Présentation . . . . . . . . . . . . . . . . . . .
XXIII.2.
Exemples de base . . . . . . . . . . . . . . . .
XXIII.3.
Transitions entre pages . . . . . . . . . . . .
XXIII.4.
Page unique « multivue » . . . . . . . . . . . .
XXIII.5.
Positionnement des entêtes et pieds de page
XXIII.6.
Les différents types de boutons . . . . . . . .
XXIII.7.
Formulaires web mobiles . . . . . . . . . . . .
XXIII.8.
List Views . . . . . . . . . . . . . . . . . . . . .
XXIII.9.
Barres de navigation . . . . . . . . . . . . . .
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
82
83
84
84
85
87
87
88
89
90
92
92
94
94
95
95
95
96
98
99
100
100
100
100
101
101
102
102
102
102
102
103
104
105
105
105
105
106
106
107
107
107
107
XXIII.10.
Menus de sélection . . . . . . . . . . . . . . . . .
XXIII.11.
Géolocalisation . . . . . . . . . . . . . . . . . . . .
XXIV.Design responsif . . . . . . . . . . . . . . . . . . . . . . .
XXIV.1.Media Queries . . . . . . . . . . . . . . . . . . . .
XXIV.2.Multi-colonnes . . . . . . . . . . . . . . . . . . . .
XXIV.3.Images bordures . . . . . . . . . . . . . . . . . . .
XXIV.4.Flexbox Layout . . . . . . . . . . . . . . . . . . . .
XXIV.5.Type de connexion . . . . . . . . . . . . . . . . . .
XXV.BlackBerry 10 . . . . . . . . . . . . . . . . . . . . . . . .
XXV.1.Historique . . . . . . . . . . . . . . . . . . . . . . .
XXV.2.Le système BB10 . . . . . . . . . . . . . . . . . .
XXV.3.Z10 . . . . . . . . . . . . . . . . . . . . . . . . . . .
XXV.4.IDE . . . . . . . . . . . . . . . . . . . . . . . . . . .
XXV.4.1. main.cpp . . . . . . . . . . . . . . . . . .
XXV.4.2. Chargement d’un fichier QML . . . . .
XXV.4.3. Créer une « UI » avec QML . . . . . . .
XXV.4.4. Images . . . . . . . . . . . . . . . . . . .
XXV.4.5. Composants de dialogue . . . . . . . . .
XXV.4.6. Capteurs . . . . . . . . . . . . . . . . . .
XXV.4.7. Jeu basé sur l’accéléromètre . . . . . .
XXV.4.8. État de la batterie . . . . . . . . . . . .
XXV.4.9. Lecteur de code barre . . . . . . . . . .
XXV.4.10.Gestion d’une base de données SQLite
XXV.4.11.Requête SQL en QML . . . . . . . . . .
XXV.4.12.Citations . . . . . . . . . . . . . . . . . .
XXV.4.13.FilePicker . . . . . . . . . . . . . . . .
XXV.4.14.Calendrier . . . . . . . . . . . . . . . . .
XXV.4.15.Gestion des comptes . . . . . . . . . . .
XXV.4.16.Dictaphone . . . . . . . . . . . . . . . . .
XXV.4.17.Lecture/écriture au format JSON . . .
XXV.4.18.Manipulation de la lumière LED . . .
XXV.4.19.MapView . . . . . . . . . . . . . . . . . .
XXV.4.20.Notifications . . . . . . . . . . . . . . . .
XXV.4.21.Orientation . . . . . . . . . . . . . . . .
XXV.4.22.Stockage permanent . . . . . . . . . . .
XXV.4.23.Sons système . . . . . . . . . . . . . . .
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
107
107
108
108
110
111
111
111
113
113
113
114
115
115
116
116
122
123
123
123
123
124
124
124
124
125
125
125
126
126
126
127
127
127
127
128
INFO4007
I.
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
Évolution de HTML/CSS/JavaScript
I.1.
W3C & évolution
+ Années 1970 : La DARPA 1 crée le réseau Arpanet pour échanger des données entre universités. Le protocole TCP/IP est inventé pour standardiser le transfert des données entre
ordinateurs.
+ Années 1980 : Arpanet est scindé en deux, d’un côté Milnet (à vocation militaire), de l’autre
côté NSFnet (à vocation universitaire, ex-Internet). Les premières applications comme FTP 2
ou le courriel font leur apparition, à des vitesses de 56 kbit/s. Le système DNS 3 est inventé
pour associer des noms aux adresses IP.
+ 1984 : le CERN 4 adopte le même type de réseau pour ses échanges internes, puis se relie à un
laboratoire américain via Internet. C’est l’équipe dirigée par Tim Berners-Lee qui est chargée
d’inventer un nouveau protocole pour mettre en ligne des pages avec des liens hypertextes.
+ L’utilisation de ces pages reliées entre elles devient public et commence petit-à-petit à former
un réseau mondial appelé World Wide Web.
Les premières versions de HTML 5 voient le jour dans les années 1990, dérivées de la famille
des langages SGML 6 .
Les pages HTML utilisent le protocole HTTP 7 pour établir un dialogue entre le navigateur et
le serveur et échanger les données sur le réseau.
+ En 1993, le navigateur Mosaic développé par Sun sous Unix devient très populaire et inaugure
la balise <img> pour intégrer des images, ainsi que les formulaires (<form>) pour la saisie des
données.
En 1994, une partie de l’équipe fonde Netscape et crée le navigateur Netscape Navigator qui
incorpore de nombreux éléments de présentation (polices, alignements, etc.), ce qui finalement
va à l’encontre de l’objectif initial du langage HTML.
+ Tim Berners-Lee quitte le CERN en 1994 pour rejoindre le MIT 8 et fonde le W3C 9 pour
promouvoir la standardisation des langages du Web.
+ 1995 : le W3C publie HTML 2.0 et débute le brouillon HTML 3.0 qui ne débouchera sur aucune
implémentation officielle.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Defense Advanced Research Projects Agency. http://www.darpa.mil
File Transfer Protocol.
Domain Name System.
Organisation européenne pour la recherche nucléaire.
HyperText Markup Language.
Standard Generalized Markup Language.
HyperText Transfer Protocol.
Massachusetts Institute of Technology.
World Wide Web Consortium. http://www.w3.org
Éric Hervet
- 1/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
Du côté de Netscape, Brendan Eich invente le langage JavaScript.
Microsoft s’aperçoit de l’existence d’Internet ( !) et crée la première version d’Internet Explorer
pour Windows . . . basée sur Mosaic.
+ 1996 : Un nouveau standard nommé CSS 10 est officialisé pour régir tout ce qui concerne la
présentation des documents et ainsi séparer la forme du contenu.
Internet Explorer passe à la version 3.0 et commence à intégrer quelques fonctionnalités de
CSS.
+ 1997 : le W3C publie HTML 3.2.
Internet Explorer 4.0 est installé par défaut avec Windows 98 et domine Netscape. Il fait malheureusement appel à des nouveautés dont Microsoft est propriétaire (JScript, VBScript, ActiveX).
Le brouillon sur HTML 4.0 continue pour intégrer de nombreuses fonctionnalités avancées
(support des styles, des scripts, des frames et des objets). HTML 4.0 est publié en décembre
1997.
Après HTML 4.0, le premier groupe de travail (HTML Working Group) s’arrête. Le second
travaille sur XHTML, une version chargée de redéfinir HTML comme une application de
XML 11 . Ce groupe est à l’origine de XHTML 1.0, qui ne produit aucune avancée significative
pour le langage HTML.
+ 1998 : le W3C publie une recommandation de CSS 2.0 puis une révision CSS 2.1 avec une
approche plus réaliste à implémenter. Parallèlement, le développement de CSS 3 commence.
+ S’ensuit une longue période d’apparente stagnation du côté du W3C, parfois critiqué par les
développeurs web pour son fonctionnement trop fermé.
Les animations Flash remportent un succès fulgurant, rendant possible grâce à une petite
extension au navigateur, d’intégrer moult animations, dessins vectoriels, sons, vidéos, éléments
d’interaction, etc., le tout complété avec un langage de programmation, ActionScript.
En 2000, AOL rachète Netscape sur le déclin. La version 4 du navigateur est renommée « Communicator » mais est nettement peu performante et ne résiste pas aux pratiques commerciales
de Microsoft.
Le code source de ce qui devait devenir la version 5.0 de Netscape passe sous licence libre en
1998 avec la création de l’organisation Mozilla.
En 2001, Microsoft lance Internet Explorer 6.0 et n’y touche plus pendant 6 ans, considérant la
suprématie établie (jusqu’à 95% de parts de marché).
Le W3C publie XHTML 1.1 qui se révèle complexe à mettre en place (trop de contraintes de
spécifications).
10. Cascading Style Sheets.
11. eXtensible Markup Language.
Éric Hervet
- 2/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
+ En 2002, la fondation Mozilla lance un nouveau projet de navigateur Open Source nommé successivement Phoenix, Firebird puis Firefox, dont les innovations séduisent un public averti
puis de plus en plus large. Ses forces principales sont son extensibilité et son respect des standards.
Opera Software propose le navigateur Opera, d’abord payant puis gratuit à partir de 2005.
On le retrouve très tôt sur les consoles de jeu et les plates-formes mobiles.
Les soucis commencent lorsque le W3C décide d’évoluer à terme vers XHTML 2.0 dont le premier brouillon est dévoilé en août 2002. Cette nouvelle version est incompatible avec les précédentes !
Le 4 juin 2004, la mailing-list WhatWG 12 est créée à l’initiative de Ian Hickson d’Opera qui
travaille sur Web Forms 2.0 pour étendre les fonctionnalités des formulaires HTML. Le W3C,
quant à lui, tente de persévérer sur la voie du XML.
Le WhatWG est formé de passionnés souhaitant améliorer HTML, issus entre autres d’équipes
de Mozilla, d’Apple et d’Opera. Leur objectif est de faire évoluer le langage pour répondre
aux besoins concrets de l’explosion du Web, tout en maintenant sa simplicité et sa rétrocompatibilité. Le WhatWG commence son travail en juin 2004 sous la dénomination de Web
Applications 1.0. Ian Hickson devient éditeur officiel du document HTML 5 et rejoint
finalement Google (membre du W3C).
+ En avril 2007, la spécification HTML 5 est soutenue devant le W3C par Mozilla, Apple et
Opera, et acceptée comme point de départ du nouveau groupe de travail HTML, qui publie le
premier brouillon HTML 5 le 22 janvier 2008 et reconnaît que XHTML 2.0 est un projet trop
ambitieux.
Le W3C et WhatWG collaborent alors sur HTML 5 avec des approches différentes mais avec un
pragmatisme certain.
Entre temps, Apple a lancé Safari pour Mac (2003) puis Windows (2009).
Google développe son propre navigateur Google Chrome à partir de septembre 2008, sur la
base d’un projet libre appelé Chromium . . . à un rythme extrêmement soutenu. Google vise la
simplicité de navigation et les performances à l’exécution.
+ Les navigateurs mobiles sont des dérivés des navigateurs pour ordinateurs, permettant de
doter téléphones et intelligents et tablettes de la possibilité d’accéder au Web depuis que les
capacités des réseaux sans fil proposent des débits acceptables et que la mobilité entre dans
les moeurs. Ils se comportent différemment selon les temps de chargement et la navigabilité au
doigt.
Microsoft se réveille est reprend un rythme de développement normal avec Internet Explorer 7
en 2006 à l’occasion de la sortie de Windows Vista.
Internet Explorer 8 apparaît en mars 2009, et c’est en juillet de la même année que le
W3C annonce l’arrêt du travail sur XHTML 2.0 pour allier ses forces à WhatWG pour une
nouvelle version de HTML. Pendant que CSS 3 voit ses modules complétés progressivement,
la spécification HTML 5 est désormais adoptée officiellement comme langage de prédilection
12. Web Hypertext Application Technology Working Group.
Éric Hervet
- 3/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
pour le Web.
+ Dès lors, tous les navigateurs s’efforcent d’intégrer de plus en plus de fonctionnalités du langage
HTML 5, menant à une accélération de nouvelles versions. Mozilla adopte un nouveau modèle
de développement basé sur plusieurs canaux parallèles (Aurora, version Bêta, version Finale).
En 2011, Microsoft surprend tout le monde en confirmant son intérêt pour les standards du
Web et sa volonté de les exploiter à un haut niveau avec Internet Explorer 10. Windows 8 est
distribué fin 2012 avec une nouvelle interface utilisateur qui interprète directement HTML 5,
CSS 3 et JavaScript pour créer des applications intégrées au système.
De nos jours, les différents langages mis en jeu dans la composition d’une page web ou d’une
application web sont souvent : HTML 5, JavaScript et CSS 3. Le terme générique HTML 5
regroupe finalement les trois technologies.
HTML 5 est « livré » avec plusieurs API 13 évoluées qui se manipulent avec JavaScript :
+ La nouvelle version du langage ECMAScript 5, incluant l’API JSON.
+ Les tableaux typés natifs (pour un gain de performance).
+ XMLHttpRequest 2 et les objets FormData.
+ L’API Selectors et l’attribut classList.
+ Les attributs async et defer.
+ Plus diverses améliorations mineures au niveau atomique destinées à soulager les développeurs
web.
I.2.
Syntaxe HTML, encodages, types MIME
Bien que rétrocompatible et très ressemblante à la syntaxe HTML 4, la syntaxe HTML 5 n’est
pourtant plus basée sur SGML. Un document HTML 5 commence toujours par une ligne doctype
qui permet de passer en mode de rendu conforme aux standards dans les navigateurs analysant la
déclaration de type (doctype sniffing).
Les balises ou éléments HTML servent à structurer le contenu d’un document. Une balise définit
la sémantique, le comportement et éventuellement une apparence prédéfinie via la feuille de style
interne du navigateur.
HTML 5 peut être classifié en plusieurs catégories d’éléments :
13. Application Programming Interface.
Éric Hervet
- 4/128 -
Hiver 2014
INFO4007
Métadonnées
Flux
Section
Titrage
Texte
Technologie de l’inforoute
Présentation
ou
comportement
Contenu structuré
En-tête et pied de
page
Titres et soustitres
Texte du document
I.. HTML/CSS/JavaScript
base, command, link, meta, noscript, script, style,
title
a, abbr, address, area, article, aside, audio, b,
bdi, bdo, blockquote, br, button, canvas, cite, code,
command, datalist, del, details, dfn, div, dl, em,
embed, fieldset, figure, footer, form, h1, h2, h3,
h4, h5, h6, header, hgroup, hr, i, iframe, img, input,
ins, kbd, keygen, label, map, mark, math, menu, meter,
nav, noscript, object, ol, output, p, pre, progress,
q, ruby, s, samp, script, section, select, small, span,
strong, style, sub, sup, svg, table, textarea, time,
ul, var, video, wbr
article, aside, nav, section
h1, h2, h3, h4, h5, h6, hgroup
a, abbr, area, audio, b, bdi, bdo, br, button, canvas,
cite, code, command, datalist, del, dfn, em, embed,
i, iframe, img, input, ins, kbd, keygen, label, map,
mark, math, meter, noscript, object, output, progress,
q, ruby, s, samp, script, select, small, span, strong,
sub, sup, svg, textarea, time, var, video, wbr
audio, canvas, embed, iframe, img, object, video, svg
Contenu em- Ressources
exbarqué
ternes
Contenu
Interaction
avec a, audio, button, details, embed, iframe, img, input,
interactif
l’utilisateur
keygen, label, menu, object, select, textarea, video
Selon le contexte, les éléments peuvent se recouvrir et ne sont pas exclusifs.
Un document HTML possède par défaut une tête (head) et un corps (body). La tête définit les propriétés globales du document (titre, apparence, méta-informations) et le corps contient des balises
de contenu.
< ! doctype html>
<html>
<head>
<meta charset= " utf −8 " >
< t i t l e > T i t r e du document< / t i t l e >
< / head>
<body>
...
< / body>
< / html>
Éric Hervet
- 5/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
Les attributs modifient les propriétés des balises HTML. Un élément peut avoir zéro ou plusieurs
attributs, certains facultatifs, d’autres obligatoires.
Les commentaires s’introduisent entre <!−− et −−>.
L’encodage des caractères existe depuis les débuts de l’informatique. Il consiste à définir le stockage
en binaire, le seul langage compris par un processeur, les caractères typographiques humains.
Aux tous débuts, chaque caractère était codé sur 7 bits grâce au code ASCII 14 , ce qui permettait
jusqu’à 127 possibilités (lettres, chiffres, symboles de ponctuation, signes mathématiques).
L’encodage ISO-8859-1 (appelé aussi Latin-1) permet d’intégrer les caractères accentués de la plupart des langues occidentales (anglais, français, espagnol, italien, etc.). L’ISO-8859-15 (Latin-9) est
une mise à jour apportant quelques nouveaux caractères, notamment le signe de l’Euro.
L’encodage UTF-8 15 quant à lui utilise un encodage variable (entre 1 et 4 octets selon les caractères)
pour étendre le nombre de combinaison possibles et être encore plus « universel ». Les 128 premiers
caractères correspondent (sont compatibles) à ceux de la table ASCII et sont codés sur un seul octet.
Le W3C approuve le choix de l’UTF-8 et recommande son usage pour tout protocole échangeant du
texte sur Internet, dont évidemment HTML et HTTP.
Représentation binaire UTF-8
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Signification
1 octet codant 1 à 7 bits
2 octets codant 8 à 11 bits
3 octets codant 12 à 16 bits
4 octets codant 17 à 21 bits
Exemples :
Caractère
Espace
A
A
C
◻
Valeur binaire
0100000 (32)
1000001 (65)
0010 000010 101100 (8364)
000 010000 000000 000000 (65536)
Codage UTF-8
00100000
01000001
11100010 10000010 10101100
11110000 10010000 10000000 10000000
Valeur hexadécimale
20
41
E2 82 AC
F0 90 80 80
Les entités HTML sont des codes SGML permettant d’afficher des caractères indépendamment de
l’encodage global du document. Exemples : &eacute; pour é, &copy; pour ©, etc.
Le format MIME 16 est un standard qui ajoute des codages supplémentaires à l’ASCII pour l’envoi
de courriels contenant des données non textuelles.
Une déclaration MIME est constituée de deux parties : un type et un sous-type séparés par /. Ceux
débutant par x− ne sont pas standardisés et les préfixes vnd. font référence à une propriété du
vendeur.
14. American Standard Code for Information Interchange.
15. Unicode Tranformation Format-8.
16. Multipurpose Internet Mail Extensions.
Éric Hervet
- 6/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
application/javascript
application/octet-stream
application/xhtml+xml
application/x-shockwave-flash
application/vnd.ms-excel
application/msword
application/vnd.openxmlformatsofficedocument.wordprocessingml.document
application/vnd.ms-powerpoint
application/vnd.oasis.opendocument.text
application/vnd.oasis.opendocument.spreadsheet
application/vnd.oasis.opendocument.presentation
audio/mpeg
image/gif
image/jpeg
image/png
image/svg+xml
text/css
text/html
text/plain
text/xml
video/mpeg
video/mp4
video/x-flv
I.. HTML/CSS/JavaScript
Script JavaScript
Flux de données (type inconnu ou fichier exécutable)
XHTML
Animation Adobe Flash
Fichier Microsoft Excel
Fichier Microsoft Word
Fichier Microsoft Word de type Open XML
Fichier Microsoft Powerpoint
Fichier texte OpenDocument
Fichier feuille de calcul OpenDocument
Fichier de présentation OpenDocument
Audio MPEG ou MP3
Image GIF
Image JPEG
Image PNG
Image SVG
Feuille de style CSS
HTML
Texte brut
XML
Vidéo MPEG
Vidéo MP4
Vidéo FLV Flash Video (Adobe)
En HTML 5, les navigateurs se basent d’abord sur l’en-tête HTTP Content-Type fournie par le
serveur, si elle est présente. Exemple :
Content-Type: text/html;charset=UTF-8
Du côté serveur, il est possible de modifier les en-têtes délivrées pour le document de différentes
façons (fichier .htaccess avec un serveur web Apache, instruction PHP, etc.).
Si aucune en-tête HTTP n’est présente, le navigateur tente de détecter le marqueur BOM 17 en
début de fichier. Mais ce marqueur ajouté par les éditeurs de texte est souvent source de difficultés
et peut afficher des caractères indésirables en haut de page s’il est mal interprété.
En dernier recours, l’utilisation de la balise meta dans la section <head> du code HTML peut définir
l’encodage de caractères utilisé dans le document : <meta charset="UTF-8">
Les documents HTML 5 (ou XHTML 5) peuvent être validés grâce à des analyseurs syntaxiques en
ligne. Par exemple :
http://validator.w3.org/
http://jigsaw.w3.org/css-validator pour le CSS
17. Byte Order Mark.
Éric Hervet
- 7/128 -
Hiver 2014
INFO4007
I.3.
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
Styles CSS
L’apparence d’un document HTML est définie par une ou plusieurs feuilles de style qui lui sont
associées. Le langage CSS définit un ensemble de règles de mise en forme appliquées de façon combinée selon un degré de priorité (styles intrinsèques au navigateur, styles utilisateurs, styles selon
le média de consultation).
La séparation forme (CSS) / contenu (HTML) permet une plus grande souplesse dans la maintenance
des styles globaux pour un site et de se concentrer sur la sémantique des éléments dans le document
HTML.
Le style peut être défini :
+ Dans un fichier externe grâce à la balise <link>.
+ Dans le document HTML grâce à la balise <style> dans la section <head>.
La syntaxe du langage CSS est simple : un sélecteur pour désigner le ou les éléments HTML
auxquels appliquer des propriétés CSS, regroupées entre accolades.
Feuille de style externe :
< ! doctype html>
<html>
<head>
<meta charset= " utf −8 " >
< t i t l e > T i t r e du document< / t i t l e >
<link rel= " s t y l e s h e e t " media= " screen " href= " s t y l e s . c s s " type= " t e x t / c s s " >
< / head>
<body>
...
< / body>
< / html>
Feuille de style interne :
< ! doctype html>
<html>
<head>
<meta charset= " utf −8 " >
< t i t l e > T i t r e du document< / t i t l e >
<style type= " t e x t / c s s " >
body
{
background − c o l o r : c h o c o l a t e ;
Éric Hervet
- 8/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
}
p
{
font − s i z e : 32px ;
text − a l i g n : c e n t e r ;
color : # f f f ;
}
< / style>
< / head>
<body>
...
< / body>
< / html>
Exemples de sélecteurs CSS de base :
p
Tous les éléments p.
p span
Tous les éléments span dans des éléments p.
p, span
Tous les éléments p et span.
div p span
.classe
p.classe
#titre
p#titre
div#titre p.classe
a:hover
input[type=submit]
h1+h2
I.4.
<p>...
<p><span>...
<p>...</p>
<span>...</span>
Tous les éléments span dans des éléments p, <div><p><span>...
eux-mêmes dans des éléments div.
Tous les éléments de classe classe.
<p class="classe">...
<span class="classe">...
Tous les éléments p de classe classe.
<p class="classe">...
L’élément avec l’id titre.
<div id="titre">...
<h1 id="titre">...
L’élément p avec l’id titre.
<p id="titre">...
Tous les éléments p de classe classe, dans <div id="titre">
l’élément div ayant le l’id titre.
<p class="classe">...</p>
<p class="classe">...</p>
</div>
Tous les liens « survolés ».
<a>Lire cet article</a>
Tous les éléments input d’attribut type <input type="submit">
submit
Tous les éléments h2 suivant directement <h1>Titre principal</h1>
des éléments h1
<h2>Sous-titre</h2>
Rappels JavaScript
JavaScript est un langage développé par Netscape en 1995, d’abord intégré à Netscape Navigator,
puis aux autres navigateurs. C’est un langage interprété par le navigateur (client) qui permet
d’ajouter de l’interaction avec l’utilisateur.
Éric Hervet
- 9/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
Il permet, grâce au DOM 18 , de manipuler les éléments HTML de la page courante : les créer dynamiquement, les modifier, les supprimer, agir sur leurs propriétés CSS, etc.
C’est aussi JavaScript qui est utilisé dans la technologie Ajax 19 pour charger dynamiquement des
contenus en relation avec le serveur, ou encore avec JSON 20 en tant que format de données.
Un « framework » JavaScript est un ensemble de fonctions regroupées dans un fichier externe à
inclure dans une page HTML grâce à la balise <script>. Un framework définit un environnement
permettant d’étendre les possibilités déjà offertes par la base du langage.
jQuery est un framework populaire et facile à aborder. Sa syntaxe simple peut se révéler efficace
en quelques lignes de code. Il comprend des fonctions de modification dynamique du DOM, des
styles CSS, des effets d’animation et des fonctions pour l’écriture de gestionnaires d’événements ou
d’appels Ajax.
Il est recommandé de placer les appels JavaScript ou le chargement des frameworks en fin de document, avant la balise fermante </body> pour ne pas bloquer le chargement de la page. Cependant
certains scripts doivent parfois être placés en amont ou dans le contenu de la page, pour pouvoir agir
dessus.
< ! doctype html>
<html>
<head>
<meta charset= " utf −8 " >
< t i t l e > T i t r e du document< / t i t l e >
<link rel= " s t y l e s h e e t " media= " screen " href= " s t y l e s . c s s " type= " t e x t / c s s " >
< / head>
<body>
<p>Paragraphe< / p>
<script src= " monfichier . j s " >< / script>
< / body>
< / html>
I.5.
Protocole HTTP
Le protocole HTTP 21 est un protocole de communication pour envoyer des demandes à un serveur
web et transférer (recevoir) le contenu des pages web. HTTP fonctionne habituellement grâce à
TCP/IP, un protocole réseau de plus bas niveau. D’autres protocoles répandus sur Internet sont
SMTP 22 et POP3 23 /IMAP 24 pour la réception et l’envoi de courriels, FTP 25 pour le transfert de
18.
19.
20.
21.
22.
23.
24.
25.
Document Object Model.
Asynchronous JavaScript and XML.
JavaScript Object Notation.
HyperText Transfer Protocol.
Simple Mail Transfer Protocol.
Post Office Protocol.
Internet Message Access Protocol.
File Transfer Protocol.
Éric Hervet
- 10/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
fichiers, DNS 26 pour la résolution des noms de domaines en adresses IP, etc.
HTTP est basé essentiellement sur un dialogue texte puisqu’à l’origine les pages web sont essentiellement constituées de code HTML. C’est Tim Berners-Lee qui a conçu le protocole HTTP, numéroté
0.9, puis 1.0 puis 1.1.
La plupart du temps, les pages web sont demandées au serveur grâce aux commandes GET et POST.
Il en existe d’autres mais utilisées plus rarement pour des besoins spécifiques (OPTIONS, CONNECT,
HEAD, TRACE, PUT, DELETE).
Exemple :
telnet abaque.ca 80
Trying 139.103.17.3...
Connected to abaque.ca.
Escape character is ’^]’.
GET /index.html HTTP/1.1
host: abaque.ca
HTTP/1.1 200 OK
Server: nginx/1.4.4
Date: Fri, 03 Jan 2014 19:18:13 GMT
Content-Type: text/html
Content-Length: 12020
Last-Modified: Mon, 30 Dec 2013 00:02:59 GMT
Connection: keep-alive
ETag: "52c0b833-2ef4"
Accept-Ranges: bytes
<!DOCTYPE html>
<html>
<head>
<title>COURS DU PROFESSEUR &Eacute;RIC HERVET</title>
<link rel="stylesheet" type="text/css" href="css/styles.css"/>
<meta http-equiv=’Content-Type’ content=’text/html; charset=utf-8’ />
</head>
<body>
...
26. Domain Name System.
Éric Hervet
- 11/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
I.. HTML/CSS/JavaScript
</body>
</html>
Connection closed by foreign host.
Les codes de retour font partie de cinq familles :
+ 1xx : Information
+ 2xx : Succès (200 : OK)
+ 3xx : Redirection (301 : Moved Permanently ; 302 : Found ; 304 : Not Modified)
+ 4xx : Erreur du client HTTP (401 : Unauthorized ; 403 : Forbidden ; 404 : Not found ; 410 : Gone)
+ 5xx : Erreur du serveur (500 : Internal Server Error ; 503 : Service Unavailable)
Éric Hervet
- 12/128 -
Hiver 2014
INFO4007
II.
Technologie de l’inforoute
II.. Licences
Les différents types de licences
http://wiki.korben.info/les_differentes_licences
Éric Hervet
- 13/128 -
Hiver 2014
INFO4007
III.
Technologie de l’inforoute
III.. Navigateurs web
Navigateurs web et supports
Il existe aujourd’hui une très grande hétérogénéité de navigateurs, due à la variété d’appareils
(smartphones, tablettes, consoles de jeu) et des systèmes d’exploitation (Android, iOS, Windows Mobile, Symbian, etc.).
III.1.
Navigateurs, moteurs de rendu
+ Les navigateurs utilisent des moteurs de rendu en ajoutant une interface graphique (menus, barre d’adresses, gestion de l’historique, extensions, etc.). Plusieurs navigateurs peuvent
utiliser le même moteur de rendu.
+ Un moteur est chargé d’interpréter le code HTML et produire son rendu graphique à l’écran en
appliquant des feuilles de style CSS. Il interprète aussi le code JavaScript et délègue la lecture
des médias à des librairies nativement intégrées au moteur ou présentes grâce à des extensions.
Moteur
Navigateurs
Développement Licence
Trident
WebKit
Internet Explorer
Google Chrome, Chromium, Apple Safari,
Apple Safari Mobile, Android, Epiphany
Gecko
Mozilla Firefox, Camino, K-Meleon, Galeon,
Flock
Opera, Opera Mobile, Opera Wii
Konqueror
Microsoft
Apple, Google,
KDE,
Nokia,
RIM, Palm, etc.
Fondation Mozilla
Opera Software
KDE
Presto
KHTML
III.2.
Propriétaire
Open Source (GNU LGPL)
Open Source (MPL, GNU
GPL, GNU LGPL)
Propriétaire
Open Source (GNU LGPL)
Téléphones intelligents, tablettes
. . . Marché en pleine expansion avec moult versions de navigateurs comportant des spécificités visà-vis des moteurs et du matériel.
Il est impossible humainement, financièrement et matériellement de garantir une « optimisation »
pour chaque appareil. HTML, CSS et JavaScript sont conçus pour s’adapter au mieux dans la
plupart des cas.
Les Smart TV font souvent appel à un navigateur propriétaire ou un moteur Opera.
Les consoles Wii et Wii U utilisent aussi Opera et Webkit. XBox utilise bien sûr Internet Explorer.
Prise en charge de HTML 5
+ When can I use...
http://caniuse.com
+ HTML5Please
http://html5please.com
Éric Hervet
- 14/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
+ HTML5 & CSS3 Readiness
http://html5readiness.com
+ HTML5Test
http://html5test.com
+ Mobile HTML
http://mobilehtml5.org
+ Find me by IP
http://fmbip.com
+ Comparaison des moteurs de rendu HTML 5
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML5%29
+ Web specifications support in Opera products
http://www.opera.com/docs/specs/productspecs
+ Opera version history
http://www.opera.com/docs/history
+ Chromium Web Platform Status
http://chromestatus.com
+ Browserscope
http://www.browserscope.org
III.3.
Bibliothèques de détection et de modernisation
Les navigateurs étant inégaux face aux nombreuses fonctionnalités de HTML 5, des librairies
JavaScript proposent soit de pallier certains manques, soit de renseigner sur les fonctionnalités
supportées par le navigateur de l’utilisateur.
+ Modernizr
Pour la détection de HTML 5 et CSS 3.
Renseigne au sujet du support de fonctionnalités individuelles (propriétés CSS ou API Canvas,
SVG, HTML 5 audio, HTML 5 video, géolocalisation, etc.).
Modernizr n’ajoute aucune fonctionnalité manquante ou non implémentée.
< !DOCTYPE html>
<html>
<head>
Éric Hervet
- 15/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
<meta charset= " utf −8 " >
<title>Titre< / title>
<script src= " modernizr . j s " >< / script>
< / head>
Le fichier modernizr.js est à télécharger sur le site officiel de Modernizr.
http://www.modernizr.com/download
Il est alors possible d’écrire des règles CSS appliquées en cas de support ou de non support.
i f ( Modernizr . canvas )
{
var c = document . createElement ( ’canvas’ ) ;
// ...
}
else // Pas de support de Canvas
{
}
+ html5shim (ou html5shiv)
Script autorisant l’usage des nouveaux éléments HTML 5 sur Internet Explorer < 9.
http://code.google.com/p/html5shim
+ Polyfills
Scripts à inclure dans une application web pour anticiper la venue d’une API et combler un
manque de support tant bien que mal. Ils fonctionnent souvent de pair avec la détection de
fonctionnalités de Modernizr.
http://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills
III.4.
Frameworks HTML
Un framework HTML est un modèle type qu’on peut utiliser pour bâtir le squelette initial d’un site
web. Il permet de suivre un ensemble de bonnes pratiques pour la structuration des fichiers et du
code.
+ HTML5 Boilerplate
http://html5boilerplate.com
+ Bootstrap
Conçu par l’équipe de Twitter, c’est un framework HTML/CSS et JavaScript est très populaire.
Il utilise entre autre des fonctionnalités « responsive » pour s’adapter aux différents appareils
de consultation en fonction de la résolution de l’écran.
http://getbootstrap.com
Éric Hervet
- 16/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
+ Initializr
http://www.initializr.com
Framework bâti au-dessus de HTML5 Boilerplate, facile à utiliser pour démarrer un projet
rapidement.
+ HTML5 Reset
http://html5reset.org
Framework avec une structure minimaliste, répartie dans des fichiers HTML, CSS et JavaScript classés par dossier.
III.5.
Outils de développement
+ Éditeurs web (HTML/CSS)
* Notepad++ (Windows, gratuit, licence GPL)
http://notepad-plus-plus.org
* PsPad (Windows, gratuit, freeware)
http://www.pspad.com
* SublimeText (Multiplateforme, payant)
http://www.sublimetext.com
* Eclipse (Multiplateforme, gratuit, licence EPL)
http://www.eclipse.org
* jEdit (Multiplateforme, gratuit, licence GNU GPL)
http://www.jedit.org
* Bluefish (Gratuit, licence GPL)
http://bluefish.openoffice.nl
* Aptana Studio (Multiplateforme, gratuit, licence mixte GPL)
http://www.aptana.com
* gedit (Linux/Gnome et multiplateforme, licence GNU GPL)
http://projects.gnome.org/gedit
* Kate (Linux/KDE et BSD, licence GNU GPL)
http://kate-editor.org
* Komodo Edit (Multiplateforme, gratuit, freeware)
http://www.activestate.com/komodo-edit
* TextEdit (Mac OS X, licence propriétaire)
http://www.apple.com/macosx
* Smultron (Mac OS X, licence BSD)
http://www.peterborgapps.com/smultron
* Adobe Dreamweaver (Windows, payant)
http://www.adobe.com/products/dreamweaver
Éric Hervet
- 17/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
* Adobe Edge Tools (outils gratuits et payants)
http://html.adobe.com/edge
* Microsoft Expression Web (Windows, payant)
http://www.microsoft.com/expression
* Emmet (ex Zen Coding)
http://docs.emmet.io
+ Navigateurs web
Les navigateurs alternatifs et Open Source sont en général mieux fournis en extensions de
développement (Firefox, Chrome, Opera).
Il existe plusieurs solutions pour tester sur une variété de navigateurs. Certains navigateurs
disposent de plusieurs versions indépendantes sur le même système d’exploitation . . . ce qui
n’est pas le cas d’Internet Explorer par exemple, pour lequel il est difficile d’installer des anciennes versions. Certains navigateurs sont également multiplateformes, ce qui n’est pas non
plus le cas d’Internet Explorer . . .
L’idéal est d’utiliser des machines virtuelles pour effectuer des tests fiables, c’est-à-dire
d’émuler d’autres systèmes d’exploitation par des programmes hôtes : VirtualPC, VMWare,
VirtualBox, etc.
* VirtualPC (Microsoft)
http://www.microsoft.com/windows/virtual-pc/default.aspx
* VirtualBox (Oracle, Open Source)
http://www.virtualbox.org
* VMWare (Multiplateforme, payant)
http://www.vmware.com
* Parallels Desktop (Mac)
http://www.parallels.com/products/desktop
+ Mozilla Firefox
Navigateur qui possède le plus d’extensions, notamment Firebug qui est un inspecteur de document très complet qui regroupe les outils de consultation et d’analyse du code HTML, JavaScript et CSS. Il est possible d’agir directement sur le contenu de la page et ses propriétés de
style pour constater le résultat visuellement.
http://www.getfirefox.com
http://getfirebug.com
Deux extensions peuvent s’ajouter à Firebug : YSlow (Yahoo) et Page Speed (Google). Elles
servent à effectuer des analyses de performance avec des recommandations d’améliorations
suivant les critères respectifs de Yahoo et Google.
Éric Hervet
- 18/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
http://developer.yahoo.com/yslow
http://code.google.com/speed/page-speed/download.html
+ Google Chrome
Chrome possède un inspecteur très évolué, accessible par un clic droit puis l’option Inspect
Element, ou dans le menu général sous Tools puis Developer Tools.
http://www.google.com/chrome
https://developers.google.com/chrome-developer-tools
http://getfirebug.com/releases/lite/chrome
+ Safari
Navigateur d’Apple sous Mac OS X, il faut le prendre en considération lors de la vérification des
pages web étant donné le nombre croissant d’utilisateurs.
http://www.apple.com/safari
http://getfirebug.com/firebuglite
+ Opera
Bien que moins populaire, le moteur du navigateur Opera a une excellente réputation, affiche
d’excellentes performances et est réputé pour suivre rigoureusement l’évolution des standards
du Web.
http://www.opera.com
http://getfirebug.com/firebuglite
+ Internet Explorer
http://www.microsoft.com/windows/internet-explorer
http://getfirebug.com/firebuglite
Extensions de développement et consoles JavaScript
Les extensions de développement sont un outil essentiel pour les développeurs web. Elles proposent
de nombreuses fonctionnalités de diagnostic, d’inspection du code HTML, CSS et JavaScript, de
monitoring des performances, et surtout elles intègrent une console JavaScript. Celle-ci permet
la saisie de code rapide à des fins de tests et le diagnostic des appels effectués, par un affichage
structuré des variables JavaScript (objets, tableaux, etc.).
Éric Hervet
- 19/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
III.. Navigateurs web
Pages about
Exemples :
+ about:blank : une page vide.
+ about:cache : toutes les informations du cache.
+ chrome://net-internals : toute la couche réseau du moteur WebKit.
+ chrome://gpu-internals : le moteur de rendu graphique.
+ chrome://plugins : les extensions installées.
+ opera:cpu : ressources processeurs.
+ opera:config : configuration avancée d’Opera.
Applications mobiles
De manière générale, le développement d’applications pour téléphones intelligents avec HTML 5 comporte l’inconvénient de performances moindres par rapport aux applications natives, et aussi des API
moins nombreuses.
PhoneGap propose une solution pour simplifier le développement d’applications mobiles aux personnes sachant déjà coder pour le Web, en utilisant des « conteneurs » simplifiés et des vues
HTML+CSS+JavaScript.
(phonegap.com)
Éric Hervet
- 20/128 -
Hiver 2014
INFO4007
IV.
Technologie de l’inforoute
IV.. Éléments & attributs
Éléments & attributs HTML5
http://joshduck.com/periodic-table.html
IV.1.
Modèles de contenu
+ Les éléments de flux servent à structurer le document ;
+ Les éléments de phrasé sont généralement imbriqués dans les éléments de flux et donnent
une sémantique particulière à leur contenu ;
+ Les éléments de métadonnées apportent des informations supplémentaires au contenu ou
influent la présentation.
Catégorie
Contenu de
flux
Éléments
a, p, hr, pre, ul, ol, dl, div, h1, h2, h3, h4, h5, h6, hgroup,
address, blockquote, ins, del, object, map, noscript, section, nav,
article, aside, header, footer, video, audio, figure, table, form,
fieldset, menu, canvas, details ou éléments de phrasé ou texte
Contenu de a, em, strong, small, mark, abbr, dfn, i, b, s, code, var, samp, kbd,
phrasé
sup, sub, q, cite, span, bdo, bdi, br, wbr, ins, del, img, embed,
object, iframe, map, area, script, noscript, ruby, video, audio,
input, textarea, select, button, label, output, datalist, keygen,
progress, command, canvas, time, meter ou texte
Métadonnées link, style, meta name, meta http-equiv, meta charset, script,
noscript, command
IV.2.
Doctype
Un doctype est une déclaration permettant de renseigner le navigateur sur le type de document
HTML à interpréter.
< ! doctype html>
permet de passer en mode de rendu conforme aux standards dans les navigateurs se basant sur le
« doctype sniffing ».
Les versions antérieures de (X)HTML utilisent des espaces de noms (namespaces) précisant le
standard HTML à utiliser (interpréter), avec différentes variantes autorisant ou non l’usage de
certaines balises.
Exemple pour HTML 4.01 Strict :
< !DOCTYPE HTML PUBLIC " − / /W3C/DTD HTML 4 . 0 1 / /EN"
" http : / / www. w3 . org /TR/ html4 / s t r i c t . dtd " >
Éric Hervet
- 21/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
Exemple pour XHTML 1.1 :
< !DOCTYPE html PUBLIC " − / /W3C/DTD XHTML 1 . 1 / /EN"
" http : / / www. w3 . org /TR/ xhtml11 / xhtml11 . dtd " >
IV.3.
Éléments (balises)
+ <html>
Élément racine.
L’attribut lang est recommandé.
< !DOCTYPE html>
<html lang= " f r " >
...
+ <head>
En-tête du document.
Peut inclure les éléments <title> (1), <meta> (0 ou +), <link> (0 ou +), <style> (0 ou +),
<script> (0 ou +), <base> (0 ou 1).
+ <title>
Titre du document.
Figure dans le titre de la fenêtre du navigateur et/ou dans l’onglet actif.
Apparaît dans les moteurs de recherche comme intitulé du lien.
+ <meta>
Fournit des méta-informations au sujet du document.
Éric Hervet
- 22/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
Attribut
Valeurs
name
application-name
author
description
generator
keywords
IV.. Éléments & attributs
Rôle
Méta-informations relatives à la page : nom de l’application web,
auteur, description du contenu, programme de conception utilisé, mots-clés relatifs au contenu.
ou autres valeurs
enregistrées
http-equiv refresh
default-style
content-type
content
texte
charset
encodage des caractères
Rafraîchissement
de la page.
Feuille de style
préférée.
Déclaration de la
page de code et du
type MIME.
En combinaison avec name et http-equiv, confère sa valeur à la
balise
Déclaration de la page de code qui doit être utilisée pour l’interprétation, si celle-ci est différente de l’ASCII.
+ <meta name>
Attribut
application-name
Valeurs
texte
author
description
texte
texte
keyword
texte
generator
texte
Rôle
Chaîne de texte courte donnant un nom à l’application web que
la page représente, si tel est le cas, sinon ne doit pas être utilisé.
Un tel nom est susceptible d’être affiché par le navigateur dans
sa barre de titre en lieu et place du titre du document qui peut
varier d’une page à l’autre.
Auteur du document.
Description (de longueur raisonnable) du contenu, appropriée
pour l’indexation dans les moteurs de recherche.
Liste de mots-clés séparés par des virgules, pertinents pour le
contenu de la page, susceptibles d’être utilisés par les moteurs
de recherche.
Programme ou système ayant généré le contenu. Ne doit pas
être utilisé si le document est conçu « à la main ».
Il est alors obligatoire d’ajouter aussi l’attribut content pour donner le contenu associé à la
propriété figurant dans name.
+ <meta charset>
L’attribut charset est nouveau en HTML 5. Il spécifie l’encodage des caractères utilisé dans le
reste du document.
Éric Hervet
- 23/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
+ <meta http-equiv>
Depuis HTML 5, l’attribut http-equiv ne peut plus contenir de valeur vide, mais uniquement
une parmi les valeurs suivantes : content-type, default-style, refresh.
Attribut
Valeurs
refresh
entier_positif
refresh
entier_positif;
url=URL
Rôle
Rafraîchissement de la page à intervalles réguliers exprimés en secondes.
Redirection vers l’adresse URL après un délai exprimé en
secondes.
Définit quel ensemble de style doit être appliqué par défaut, si celui-ci est nommé.
default-style Valeur de l’attribut
title d’un élément
<style> ou <link
rel="stylesheet">
content-type Pour
la
syn- Déclaration du type MIME et de l’encodage des caractères
taxe
HTML
:
du document.
text/html;
charset=code
d’encodage
des
caractères.
Pour la syntaxe
XML : text/html;
charset=UTF-8
+ <link>
Méta-information qui exprime des relations inter-documents.
Éric Hervet
- 24/128 -
Hiver 2014
INFO4007
Attribut
Technologie de l’inforoute
media
Valeurs
URL
Code langue
alternate, archives,
author,
first,
help, icon, index,
last, license, next,
pingback, prefetch,
prev, search, sidebar,
stylesheet, tag, up
media query
type
Type MIME
sizes
any ou hauteur × lar-
href
hreflang
rel
geur
IV.. Éléments & attributs
Rôle
Adresse de la cible.
Langue de base du document cible.
Indique la relation existant entre le document courant et
celui de la cible (valable uniquement si l’attribut href
est précisé). (Ne sont pas autorisés contrairement à <a> :
bookmark, external, nofollow, noreferrer).
Spécifie une requête de média pour laquelle la cible est
optimisée.
Spécifie le type MIME de la cible (Ex. : text/javascript,
text/css, etc.).
Dans le cas d’une relation icône (rel="icon"), indique les
dimensions de l’image en pixels. Plusieurs valeurs peuvent
être indiquées, séparées par des espaces. Le terme any indique que l’image convient à plusieurs résolutions, notamment lorsqu’elle est au format SVG.
+ <style>
Attribut
Valeurs
Rôle
type
Type MIME
media
media query
scoped
scoped
Type MIME d’un langage de style. Dans la majorité des cas, il
s’agit de text/css.
Spécifie une ou plusieurs requêtes de média à laquelle l’instruction de style sera appliquée.
Indique que les instructions de style s’appliquent uniquement
à l’élément parent qui contient la balise <style> ainsi qu’à ses
descendants. Si cet attribut est absent, les propriétés CSS s’appliquent à l’ensemble du document.
+ <base>
Éric Hervet
- 25/128 -
Hiver 2014
INFO4007
Attribut
href
target
Technologie de l’inforoute
Valeurs
URL
_blank,
_parent, _self,
_top, nom d’un
IV.. Éléments & attributs
Rôle
Indique l’adresse à utiliser comme base de référence (préfixe)
pour tous les hyperliens du document.
Cible par défaut pour l’ouverture de tous les hyperliens de la
page. Cette indication générale peut être contournée individuellement en utilisant un attribut target dans tout hyperlien.
élément de type
iframe (attribut
name)
+ <body>
Corps de la page web . . .
+ <div>
Division de document. <div> n’a aucune valeur sémantique, il ne sert qu’à regrouper des
éléments ayant des propriétés communes.
+ <span>
Contrairement à <div>, <span> est dédié au contenu phrasé. Par contre il n’a pas non plus de
valeur sémantique.
+ <a> (anchor)
Pour les hyperliens.
Éric Hervet
- 26/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
Attribut
Valeurs
Rôle
href
hreflang
media
rel
URL
Code de langue
media query
alternate,
archives,
author, first,
help,
icon,
index,
last,
license, next,
pingback,
prefetch,
prev, search,
sidebar,
stylesheet,
tag, up
_blank,
_parent, _self,
_top, nom d’un
élément de type
iframe (attribut
name)
Type MIME
Nom du fichier
après téléchargement ou (vide)
Cible du lien.
Langage de base de la cible du lien.
Spécifie une requête de média pour laquelle la cible est optimisée.
Spécifie la relation établie par le lien entre le document courant
et la cible. Plusieurs valeurs peuvent être combinées, séparées
par des espaces.
target
type
download
Attribut un contexte de navigation dans lequel suivre le lien.
Le type MIME de la destination du lien.
Indique que la ressource liée est prévue pour être téléchargée.
Si une valeur est donnée à l’attribut, elle représente le nom du
fichier après téléchargement.
+ Sections et titres
Éric Hervet
- 27/128 -
Hiver 2014
INFO4007
Nom
section
article
nav
aside
header
footer
Technologie de l’inforoute
IV.. Éléments & attributs
Détails
Section générique regroupant une même thématique de contenu, de préférence avec
un en-tête.
Section de contenu dans un document ou une application web, dont la composition
peut être indépendante du reste de la page et extraite individuellement.
Section abritant des liens de navigation majeurs, permettant de naviguer au sein
du document ou vers d’autres pages.
Section dont le contenu est tangentiellement lié à ce qui l’entoure et qui peut être
considérée comme séparée de ce contenu.
Section d’introduction (d’un document, d’une autre section, d’un article) pouvant
contenir, selon le contexte, titres, navigation, formulaire de recherche, table des
matières, logo, etc.
Pied de page, de section ou d’article, selon son plus proche ancêtre, pouvant contenir
des informations connexes et une navigation annexe.
+ <section> (Nouvel élément)
Nouvelle balise de HTML 5, <section> sert à regrouper du contenu relatif à une même
thématique ou à une même fonctionnalité (chapitres, onglets, vues, etc.).
+ <article> (Nouvel élément)
<article> est une spécialisation de <section>. Il peut servir à identifier une portion de
document qui est distincte parmi d’autres (actualité, fiche d’informations, etc.).
+ <header> (Nouvel élément)
En-tête de section (introduction, navigation, table des matières, etc.).
Il peut apparaître plusieurs fois dans un document.
+ <footer> (Nouvel élément)
« Pied de page » (mentions légales, informations de contact, sources d’une actualité, navigation,
etc.).
Éric Hervet
- 28/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
Son usage n’implique pas nécessairement la présence d’un élément <header>.
+ <nav> (Nouvel élément)
Permet de gérer plusieurs niveaux de navigation (liens portant sur l’ensemble du site, sur une
partie de l’arborescence, vers des pages communes, vers des sections, etc.).
+ <aside> (Nouvel élément)
Contenu « tangentiel » (définitions de termes apparaissant dans le contenu, biographie,
glossaire, historique, éclaircissement, astuces, notes, etc.).
+ <address>
Pour les informations de contact (adresse, courriel, téléphone, etc.).
+ <h1> à <h6>
Titres de niveaux différents.
+ <hgroup> (Nouvel élément)
Sert à regrouper un ou plusieurs titres <h1> à <h6>.
+ Listes
* <ol>
Liste ordonnée (ordered list).
Attributs possibles : start (valeur de départ pour la numérotation), reversed (pour
que la numérotation soit décroissante) et type (1, a, A, i ou I). Le style des puces
peut être modifié par la propriété CSS list-style-type (valeurs possibles : armenian,
decimal, decimal-leading-zero, georgian, lower-alpha, lower-greek, lower-latin,
lower-roman, upper-alpha, upper-latin, upper-roman).
* <ul>
Liste non ordonnée (unordered list).
Pas d’attribut spécifique mais l’apparence des puces peut être modifiée par la propriété
CSS list-style-type (valeurs possibles : disc (défaut), square, circle).
* <li>
Élément de liste (list item).
Possède un attribut facultatif value dans le cas d’une liste <ol> pour contrecarrer l’incrémentation automatique (<li value="1">...</li>).
* <dl>
Liste de définitions (description list).
Pour lister des couples (terme, description associée).
Éric Hervet
- 29/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
* <dt>
Terme de liste de définitions.
Ne peut contenir que des éléments de phrasé. À chaque terme <dt> correspond une définition <dd>.
* <dd>
Élément de description d’une liste de définitions.
Peut contenir des éléments de flux ou de phrasé.
+ Texte et sémantique
* <p>
Nouveau paragraphe.
Élément de type bloc contenant des éléments de type phrasé.
* <blockquote>
Bloc de citation (block quotation).
Représente une section du document qui est extraite d’une autre source. Peut contenir des
éléments de flux (paragraphes, titres, images, etc.).
* <q>
Réservé aux citations courtes.
Encadré automatiquement par des guillemets par tous les navigateurs (sauf IE 7-).
* cite
Attribut qui fait référence à l’adresse de la source.
* <cite>
Représente le titre d’une oeuvre citée ou mentionnée dans le document (titre d’un ouvrage,
chanson, pièce de théâtre, opéra, film, jeu, peinture, sculpture, etc.).
* <strong>
Confère au texte une forte importance.
* <em>
Portion de texte mise en emphase.
* <b>
Historiquement pour une mise en gras (bold), représente maintenant une mise en valeur
via un style différent.
* <i>
Balise historique, pour la mise en forme en italique.
* <u>
Balise historique, pour le soulignement d’une portion de texte.
* <small>
Balise redéfinie astucieusement en « small print » (mentions légales, avertissements discrets, licence d’utilisation, etc.).
Éric Hervet
- 30/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
* <dfn>
Defining instance.
* <abbr>
Abbréviation.
* <code>
Code source.
* <var>
Variable dans une expression mathématique ou informatique, ou espace réservé à un texte
que le lecteur peut mentalement remplacer par une autre valeur.
* <kbd>
Entrée clavier (keyboard).
* <samp>
Exemple ou échantillon (sample) de sortie produite par un programme ou un système.
* <sub>
Fragment de texte placé en indice (subscript) (mathématiques, chimie).
* <sup>
Fragment de texte placé en exposant (superscript) (mathématiques, chimie, notes de bas
de page).
* <time> (nouveau)
Nouvel élément ayant pour objectif de lever toute ambiguïté sur la syntaxe à utiliser pour
baliser une date ou une heure.
, Attribut datetime
, Attribut pubdate
* <hr>
Séparation horizontale (horizontal rule).
* <br>
Saut de ligne (line break).
* <wbr> (nouveau)
Coupure de ligne (work break) à l’intérieur d’un mot ou d’une phrase.
* <ins>
Indique un contenu texte ayant été inséré ou ajouté dans le document après sa publication.
* <del>
Indique un contenu texte ayant été supprimé du document.
* <s>
Indique un contenu texte qui n’est plus exact ou pertinent.
* <pre>
Bloc de texte préformaté.
Éric Hervet
- 31/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
* <mark> (nouveau)
Signale et met en valeur une portion du document sur laquelle on veut porter l’attention.
* <ruby> (nouveau)
Prise en compte des caractères annotés de certaines langues étrangères.
* <rt> (nouveau)
ruby text
* <rp> (nouveau)
ruby parenthesis
* <bdo> Sens de lecture déterminé par l’algorithme bidirectionnel Unicode (BiDioverride).
<bdo dir="ltr"> : left to right.
<bdo dir="rtl"> : right to left.
http://unicode.org/reports/tr9
* <bdi> (nouveau)
BiDiisolate : isole son contenu des effets de la mise en forme de texte bidirectionnelle.
+ Contenu embarqué
On appelle contenu embarqué tout élément faisant référence à des données stockeés dans un
fichier ou une ressource externe au document HTML.
* <img>
Pour inclure une image.
Normalement utilisé pour des logos cliquables, des photos d’illustration, des icônes
cliquables pour des commandes ou des hyperliens, etc.
Les formats les plus répandus et interprétés par tous les navigateurs sont :
GIF (Format non libre ; Petits éléments graphiques, icônes, petites images animées ;
Transparence sur 1 niveau) ;
PNG (Format libre ; Images de haute qualité avec niveaux de transparence ; Jusqu’à
65 536 couleurs ; Transparence sur 1 niveau en 256 couleurs) ;
JPEG (Format soumis à un brevet ; Photographies ; Pas de transparence).
Les attributs de la balise <img> sont :
src : adresse (locale ou distante) de l’image à afficher.
alt : texte alternatif lorsque l’image ne peut pas être visualisée (fichier absent ou format
non supporté par exemple).
width, height : définissent l’espace d’affichage pour l’image (attention aux redimensionnements).
usemap : pour définir une zone de liens cliquables, définie par l’élément <map>.
ismap : de valeur booléenne true ou false, indique si le navigateur doit transmettre les
coordonnées du point cliqué sur l’image (cliquable) au serveur.
Éric Hervet
- 32/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
Outils de compression en ligne :
http://kraken.io
http://www.smushit.com/ysmush.it
http://www.jpegmini.com
http://jpeg-optimizer.com
http://punypng.com
http://tinypng.org
* Positionnement des images
Par défaut, les images sont considérées comme des éléments en ligne (propriété CSS
display: inline;).
* Images à résolution adaptative (responsive images)
Il existe plusieurs manières de faire :
, Utiliser un attribut srcset pour définir des sources alternatives en fonction de la
densité de pixels :
<img src="original.jpg" srcset="hd.jpg 2x, ultra-hd.jpg 4x">
, Utiliser un nouvel élément <picture> qui contient plusieurs éléments <source>
(comme l’élément <video> :
<picture>
<source src= " ultra −hd . jpg " >
<source media= " (max− width : 800px ) "
s r c s e t = " small . jpg 1x , small −hd . jpg 2x " >
<img src= " o r i g i n a l . jpg " a l t= " " >
< / picture>
* <map>
Exemple :
<img src= " image . jpg " a l t= " I c i une image " usemap= " # c a r t e " >
<map name= " c a r t e " >
<area shape= " r e c t "
<area shape= " r e c t "
<area shape= " r e c t "
<area shape= " r e c t "
< /map>
coords= " 264 ,233 ,404 ,423 "
coords= " 410 ,232 ,540 ,412 "
coords= " 545 ,229 ,657 ,398 "
coords= " 663 ,218 ,780 ,390 "
a l t= "H"
a l t= "T"
a l t= "M"
a l t= "L"
href= " h . html " >
href= " t . html " >
href= "m. html " >
href= " l . html " >
* <area>
Zone cliquable faisant partie d’une image map.
* <figure> (nouveau)
Permet d’associer une légende optionnelle <figcaption> à du contenu regroupé en bloc.
Éric Hervet
- 33/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
<figure>
<img src= "RR. jpg " >
< f i g c a p t i o n >Une photo de Rémi− Rossignol< / f i g c a p t i o n >
< / figure>
* <figcaption> (nouveau)
Donner une légende à l’élément <figure>.
* <iframe>
inline frame : embarque dans la page un autre document HTML. À utiliser avec précaution.
* <embed>
Pour l’intégration de contenu externe dans le document HTML. Il peut s’agir de données
non supportées par le navigateur, nécessitant l’installation d’un plug-in pour leur interprétation.
< ! −− Vidéo Quicktime −−>
<embed type= " video / quicktime " src= " a p i c s . mov" width= " 640 " height= " 480 " / >
< ! −− Animation Adobe Flash −−>
<embed src= " animation . swf " / >
< ! −− Son −−>
<embed src= " je_chante . wav" / >
* <object>
Standardisé par HTML 4, il a une syntaxe plus évoluée que <embed>. Il peut faire appel à
des extensions ou plug-ins pour interpréter les données ou fichiers binaires, et aussi passer
d’éventuels paramètres initiaux pour l’exécution de l’extension.
* Le cas de Flash
Avec HTML 5, il est maintenant possible de jouer une animation Adobe Flash sans utiliser
<embed>, notamment grâce à l’attribut data de la balise <object.
<object width= " 480 " height= " 390 "
data= " http : / / www. youtube . com / v /v9MTGNaEXGM? f s=1&amp ; hl=fr_FR&amp ; r e l =0 "
type= " a p p l i c a t i o n / x−shockwave − f l a s h " >
<param name= " movie "
value= " http : / / www. youtube . com / v /v9MTGNaEXGM? f s=1&amp ; hl=fr_FR&amp ; r e l =0 " / >
<param name= " allowFullScreen " value= " true " / >
<param name= " a l l o w S c r i p t a c c e s s " value= " always " / >
< / object>
* <video> (nouveau)
Média de type vidéo.
* <audio> (nouveau)
Média de type audio.
Éric Hervet
- 34/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
* <source> (nouveau)
Ressource média pour les balises <audio> et <video>.
* <track> (nouveau)
Ressource texte pour <audio> ou <video>.
* <canvas> (nouveau)
Zone de dessin bitmap pilotable avec un <script>.
+ Données tabulaires
* <table>
Pour représenter un ensemble d’informations en colonnes/lignes.
* <thead>
En-tête de tableau, utilisé conjointement avec <tbody> et <tfoot>.
* <tfoot>
Pied de tableau.
* <tbody>
Corps de tableau.
* <tr>
Ligne de tableau (table row).
* <td>
Contenu d’une cellule (table data) (texte, liens, images, listes, etc.).
* <th>
Cellule en-tête (table header).
* <caption>
Légende ou titre d’un tableau de données (doit figure une seule fois).
* <colgroup>
Pour spécifier des propriétés communes à un groupe de colonnes.
* <col>
Pour spécifier des propriétés individuelles aux colonnes, prioritaires sur celles de
<colgroup>.
+ Éléments interactifs
* <menu>
Pour les menus contextuels (type="context"), barres d’outils (type="toolbar") ou listes
d’actions (défaut). L’attribut label permet d’assigner une désignation au menu.
Éric Hervet
- 35/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
* <command> (nouveau)
Commande individuelle d’un <menu> (bouton classique, case à cocher, bouton radio). Le
déclenchement d’une action se fait grâce à des événements comme onClick ou onChange
et l’appel d’une fonction du DOM.
<script>
f u n c t i o n heure ( )
{
var d = new Date ( ) ;
alert (d ) ;
}
< / script>
<menu>
<command onclick= " heure ( ) ; " >Quelle heure est − i l ?< / command>
< /menu>
* <details> (nouveau)
Composant d’interface fournissant une information ou des contrôles supplémentaires à
l’utilisateur.
* <summary> (nouveau)
L’intitulé d’un élément <details> peut être spécifié par <summary>.
* <device> (nouveau)
En cours de formalisation. À terme, devrait permettre de manipuler des webcams pour
effectuer des captures vidéo.
+ Scripting
* <script>
Permet d’intégrer un ensemble d’instructions dans un langage de script par l’agent utilisateur, si celui-ci le supporte. C’est bien sûr JavaScript qui est presque toujours utilisé.
<p>Nous sommes en l ’ an
<script>
var d = new Date ( ) ;
document . write ( d . getFullYear ( ) ) ;
< / script>
< / p>
* Exécution asynchrone
L’attribut booléen async indique au navigateur d’exécuter le script de manière asynchrone,
c’est-à-dire dès qu’il est disponible, avant même le déclenchement de l’événement load et
l’objet window.
Éric Hervet
- 36/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
<script async src= " j a v a s c r i p t . j s " >< / script>
* Exécution différée
L’attribut defer charge le fichier dès que possible mais diffère l’exécution du script à
la fin du chargement de la page (juste après l’analyse HTML mais avant l’événement
DOMContentLoaded).
<script defer src= " j a v a s c r i p t . j s " >< / script>
* noscript
Contenu alternatif si le langage de script est désactivé par l’utilisateur ou non supporté
par le navigateur.
Langages de script interprétés côté serveur
+ PHP 27
http://www.php.net
+ Ruby et Ruby on Rails
http://www.ruby-lang.org
http://www.rubyonrails.org
+ Python
http://www.python.org
+ JavaServer Pages
http://java.sun.com/products/jsp
+ ASP.NET
http://www.asp.net
27. Php : Hypertext Preprocessor.
Éric Hervet
- 37/128 -
Hiver 2014
INFO4007
IV.4.
Technologie de l’inforoute
IV.. Éléments & attributs
Attributs HTML globaux
Attribut
Valeur
Rôle
accesskey
Touches d’accès direct pour la navigation au clavier.
id
itemid
Code(s) de touches
d’accès
Chaîne de caractères
Identifiant de l’élément <menu> à associer
true ou false ou ""
ou sans valeur
ltr ou rtl ou auto
true ou false ou ""
ou sans valeur
copy, move, link ; s :
chaîne de caractères ;
f : chaîne de caractères
hidden ou "" ou sans
valeur
Chaîne de caractères
Chaîne de caractères
itemprop
itemref
itemscope
Chaîne de caractères
Chaîne de caractères
Chaîne de caractères
itemtype
lang
tabindex
title
spellcheck
Chaîne de caractères
Code de langue
Nombre entier
Chaîne de caractères
true ou false
style
Propriétés CSS
class
contextmenu
contenteditable
dir
draggable
dropzone
hidden
Éric Hervet
Classes associées à l’élément.
Référence au menu contextuel de l’élément.
Rend le contenu de l’élément éditable.
Direction d’écriture du texte.
Permet le déplacement de l’élément (drag & drop).
Définit le comportement lors d’un dépôt (drag & drop).
Indique que l’élément n’est plus ou pas encore pertinent
et qu’il ne doit pas être affiché.
Identifiant unique de l’élément.
Identifiant unique défini par le vocabulaire du microformat.
Propriété individuelle du microformat.
Référence à un autre élément.
Indique que l’élément fait appel à un microformat et que
ses enfants font partie de ce format.
Vocabulaire utilisé par le microformat.
Langue dans laquelle est rédigé l’élément.
Ordre de tabulation.
Titre descriptif.
Activation/désactivation de la correction orthographique
et/ou grammaticale.
Affectation de propriétés de style à l’élément.
- 38/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
Éric Hervet
- 39/128 -
IV.. Éléments & attributs
Hiver 2014
INFO4007
IV.5.
Technologie de l’inforoute
IV.. Éléments & attributs
Relations des liens
Valeur
Effet sur
<link>
Effet
sur <a>,
Description
<area>
alternate
Lien
Lien
Lien vers une version alternative du document (version imprimable, traduction, site miroir, etc.).
archives
author
bookmark
Lien
Lien
Lien vers des archives.
Lien
Lien
Lien vers l’auteur du document (par exemple mailto:).
N/A
Lien
Lien permanent de l’ancêtre article ou section le plus proche pour
l’ajout aux favoris du navigateur.
external
N/A
Lien
Indique que le document cible ne fait pas partie du même site que le
document courant.
first
Lien
Lien
Lien vers le premier document si le document courant fait partie d’une
série.
help
icon
Lien
Lien
Lien vers une section d’aide contextuelle.
Ressource
externe
N/A
Importe une icône représentant le document courant.
index
Lien
Lien
Lien vers un autre document contenant une table des matières ou un
index, contenant le document courant.
last
Lien
Lien
Lien vers le dernier document si le document courant fait partie d’une
série.
license
next
Lien
Lien
Lien vers une licence pouvant être appliquée au contenu du document.
Lien
Lien
Lien vers le document suivant si le document courant fait partie d’une
série.
nofollow
N/A
Lien
Indique que l’auteur du document courant ne cautionne pas le document
lié.
noreferrer
N/A
Lien
Demande au navigateur de ne pas envoyer d’en-tête HTTP Referrer (permettant de déterminer la provenance du document original) si le lien est
suivi.
pingback
Ressource
externe
N/A
Adresse du serveur qui gère le pingback pour le document courant.
prefetch
Ressource
externe
Ressource
externe
Lien vers une ressource pouvant être téléchargée et mise en cache en
avance par le navigateur.
prev
Lien
Lien
Lien vers le document précédent si le document courant fait partie d’une
série.
search
Lien
Lien
Lien vers un moteur qui permet de chercher à l’intérieur du document et
ses pages afférentes.
stylesheet
Ressource
externe
N/A
Importe une feuille de style.
sidebar
Lien
Lien
Lien vers un document pouvant être affiché dans la zone contextuelle
(sidebar) du navigateur, s’il en a une.
tag
Lien
Lien
Attribue au document courant une étiquette (tag) identifiée par l’adresse
donnée.
up
Lien
Lien
Lien vers un document parent pouvant préciser le contexte du document
courant.
Éric Hervet
- 40/128 -
Hiver 2014
INFO4007
IV.6.
Technologie de l’inforoute
IV.. Éléments & attributs
Attributs événements
+ onabort
Réseau : Chargement annulé par l’utilisateur.
+ onblur
Navigation : Perte du focus.
+ oncanplay
Médias : Reprise de lecture audio ou vidéo, mais la totalité du média ne pourra pas être lue au
rythme de lecture actuel.
+ oncanplaythrough
Médias : Reprise de lecture audio ou vidéo, la totalité du média pourra être lue au rythme de
lecture actuel.
+ onchange
Formulaires : L’utilisateur a validé le changement de valeur d’un élément de formulaire.
+ onclick
Souris, pointage : Clic (puis relâchement) sur un élément.
+ oncontextmenu
Navigation : L’utilisateur a déclenché le menu contextuel.
+ ondblclick
Souris, pointage : L’utilisateur a double-cliqué sur l’élément.
+ ondrag
Drag & Drop : L’utilisateur est en train de déplacer l’élément.
+ ondragend
Drag & Drop : L’utilisateur a fini de déplacer l’élément.
+ ondragenter
Drag & Drop : L’opération de glisser-déposer est entrée dans l’élément.
+ ondragleave
Drag & Drop : L’opération de glisser-déposer a quitté l’élément.
+ ondragover
Drag & Drop : L’opération de glisser-déposer survole l’élément.
+ ondragstart
Drag & Drop : Début de glisser-déposer.
+ ondrop
Drag & Drop : Fin de glisser-déposer et dépôt.
+ ondurationchange
Médias : L’attribut DOM duration de <audio> ou <video> a été modifié.
+ onemptied
Médias : L’élément <audio> ou <video> est retourné à son état initial.
+ onended
Médias : La fin de l’audio ou de la vidéo a été atteinte.
Éric Hervet
- 41/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
+ onerror
Réseau : Le chargement de l’élément a échoué.
+ onfocus
Navigation : L’élément a reçu le focus.
+ onformchange
Formulaires : L’utilisateur a validé le changement de valeur d’un élément de formulaire.
+ onforminput
Formulaires : L’utilisateur a changé la valeur d’un élément dans le formulaire.
+ oninput
Formulaires : L’utilisateur a changé la valeur d’un élément de formulaire.
+ oninvalid
Formulaires : L’élément de formulaire n’a pas respecté les contraintes de validation.
+ onkeydown
Clavier : L’utilisateur a appuyé sur une touche.
+ onkeypress
Clavier : L’utilisateur a appuyé sur une touche caractère.
+ onkeyup
Clavier : L’utilisateur a relâché une touche.
+ onload
Réseau : L’élément a fini son chargement.
+ onloadeddata
Médias : Le navigateur peut rendre le contenu audio ou vidéo à la position de lecture courante,
pour la première fois.
+ onloadedmetadata
Médias : Le navigateur a pu déterminer la durée et les dimensions de l’élément <audio> ou
<video>.
+ onloadstart
Médias : Le navigateur a commencé à charger des données médias dans l’élément <audio> ou
<video>.
+ onmousedown
Souris, pointage : L’utilisateur a appuyé sur le bouton de la souris.
+ onmousemove
Souris, pointage : L’utilisateur a fait un mouvement avec la souris.
+ onmouseout
Souris, pointage : L’utilisateur a déplacé le curseur de souris hors des limites de l’élément.
+ onmouseover
Souris, pointage : L’utilisateur a déplacé le curseur de souris à l’intérieur des limites de l’élément
ou d’un de ses enfants.
Éric Hervet
- 42/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
+ onmouseup
Souris, pointage : L’utilisateur a relâché le bouton de la souris.
+ onmousewheel
Souris, pointage : L’utilisateur a actionné la molette de défilement de la souris.
+ onpause
Médias : L’utilisateur a mis en pause la lecture de l’élément <audio> ou <video>.
+ onplay
Médias : L’utilisateur a débuté la lecture de l’élément <audio> ou <video>.
+ onplaying
Médias : La lecture de l’élément <audio> ou <video> a débuté.
+ onprogress
Médias : Le navigateur télécharge les données médias pour l’élément <audio> ou <video>.
+ onratechange
Médias : L’attribut DOM defaultPlaybackRate ou PlaybackRate a été modifié sur l’élément
<audio> ou <video>.
+ onreadystatechange
Médias : L’élément et toutes ses ressources ont fini leur chargement.
+ onreset
Formulaires : Le formulaire a été réinitialisé.
+ onscroll
Souris, pointage : L’élément a fait l’objet d’un défilement.
+ onseeked
Médias : La valeur de l’attribut seeking a été modifiée à false.
+ onseeking
Médias : La valeur de l’attribut seeking a été modifiée à true.
+ onselect
Souris, pointage : L’utilisateur a sélectionné du texte.
+ onshow
Navigation : L’utilisateur a requis l’affichage de l’élément comme menu contextuel.
+ onstalled
Médias : Le navigateur essaye de télécharger les données pour la lecture de l’élément <audio>
ou <video> mais celles-ci ne sont pas reçues.
+ onsubmit
Formulaires : Le formulaire a été validé.
+ onsuspend
Médias : Le navigateur ne télécharge actuellement pas le contenu du média, mais ne dispose
pas encore de la totalité des données.
+ ontimeupdate
Médias : La position de lecture de l’élément <audio> ou <video> a changé.
Éric Hervet
- 43/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IV.. Éléments & attributs
+ onvolumechange
Médias : L’attribut DOM volume ou muted a été modifié sur un élément média.
+ onwaiting
Médias : La lecture de l’élément <audio> ou <video> a été mise en pause, car les données
nécessaires pour la suite sont attendues.
Éric Hervet
- 44/128 -
Hiver 2014
INFO4007
V.
Technologie de l’inforoute
V.. Formulaire
Formulaires (Web Forms)
Le langage HTML seul est clairement limité pour les formulaires web, tant au niveau des éléments
de contrôle que de leur validation et de l’envoi des données au serveur.
De nombreuses librairies JavaScript, entre autres jQueryUI et YUI, sont apparues pour apporter une réponse tant fonctionnelle que graphique aux limitations de HTML. L’affordance 28 des
contrôles est cruciale pour l’entrée d’informations (calendriers, curseurs à positionner, etc.) mais
aussi pour définir à l’avance les types de données à entrer (nombres, chaînes de caractères, courriels, URL, couleur, etc.).
V.1.
<input> et variantes
Valeurs possibles de l’attribut type de l’élément <input> :
+ text : Champ de texte.
+ password : Champ mot de passe.
+ hidden : Champ caché (invisible).
+ radio : Bouton radio (un seul choix).
+ checkbox : Cases à cocher (choix multiple).
+ button : Bouton.
+ reset : Remise à zéro d’un formulaire.
+ submit : Bouton de validation d’un formulaire.
+ image : Image cliquable.
+ file : Fichier.
Sur les navigateurs mobiles, l’attribut accept de <input type="file" ...> provoque un appel
aux applications pouvant produire une image, notamment la galerie de photos ou la caméra
intégrée. Il est même possible de faire des captures audio ou vidéo.
<input type= " f i l e " accept= " image / * " >
<input type= " f i l e " accept= " video / * ; capture=camcorder " >
<input type= " f i l e " accept= " audio / * ; capture=microphone " >
Les fichiers ainsi uploadés sont alors exploitables grâce à File API (Sect. X.).
+ tel (nouveau) : Numéro de téléphone.
+ url (nouveau) : URL/URI.
+ email (nouveau) : Adresse courriel.
+ search (nouveau) : Champ de recherche.
+ date (nouveau) : Date.
+ time (nouveau) : Heure.
+ datetime (nouveau) : Date et heure.
28. Affordance : possibilités d’action suggérées par la forme d’un objet, avant même qu’il soit utilisé.
Éric Hervet
- 45/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
V.. Formulaire
+ datetime-local (nouveau) : Date et heure locales.
+ month (nouveau) : Mois.
+ week (nouveau) : Semaine.
+ number (nouveau) : Valeur numérique.
+ range (nouveau) : Valeur numérique d’un intervalle, sans grande précision.
+ color (nouveau) : Couleur RVB (3 composantes de 8 bits).
http://www.standardista.com/html5/html5-web-forms/
http://www.w3schools.com/html/html5_form_input_types.asp
V.2.
Autres éléments
+ <textarea> : Zone de texte multiligne.
+ <select> : Liste de choix déroulante.
+ <option> : Option individuelle d’une liste de choix <select>.
+ <optgroup> : Pour le regroupement d’options.
+ <datalist> (nouveau) : Pour proposer une liste de choix possibles dans un champ de saisie.
<input type= " t e x t " l i s t = " p r o v i n c e s " name= " province " >
< d a t a l i s t id= " p r o v i n c e s " >
<option value= "NB" >Nouveau−Brunswick< / option>
<option value= "NS" >Nouvelle − Écosse< / option>
<option value= " PEI " > Î l e −du− Prince −Édouard< / option>
< ! −− . . . −−>
</ datalist>
http://demo.agektmr.com/datalist/
+ <button> : Comme <input> sauf que la valeur texte n’est plus déterminée par un attribut value
mais par le contenu intrinsèque de l’élément.
+ <output> (nouveau) : Pour recueillir le résultat d’un calcul.
<script>
function calcul ( obj )
{
o b j . value = o b j . form . r e c e t t e s . valueAsNumber −
o b j . form . depenses . valueAsNumber ;
< / script>
<form id= "somme" >
<p>
Éric Hervet
- 46/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
V.. Formulaire
<label for= " num_recettes " >R ecet tes< / label>
<input name= " r e c e t t e s " type= " number " id= " num_recettes " >
< / p>
<p>
<label for= " num_depenses " >Dépenses< / label>
<input name= " depenses " type= " number " id= " num_depenses " >
< / p>
<p>Résultat :
<output name= " t o t a l " for= " num_recettes num_depenses "
onforminput= " c a l c u l ( t h i s ) ; " form= "somme"
style= " background : yellow ; border : 2 px s o l i d orange ; padding : 3 px 10px ; " >
< / output> $< / p>
< / form>
+ <keygen> (nouveau) : Pour générer une paire de clés publique/privée.
+ <progress> (nouveau) : Barre de progression.
http://www.useragentman.com/blog/2012/01/03/cross-browser-html5-progress-bars-in-depth/
+ <meter> (nouveau) : Jauge qui représente un état précis sur une échelle définie.
V.3.
Validation des données
Beaucoup de types de champs <input> induisent une pré-validation des informations entrées
par l’utilisateur avant l’envoi au serveur.
Les messages informatifs affichés par les navigateurs ne sont, pour le moment, pas configurables
graphiquement. Certains moteurs comme WebKit supportent des attributs HTML ou des instructions CSS propriétaires (ex. : -webkit-validation-bubble-message{}) pour une personnalisation.
<form>
<label for= " email " > C o u r r i e l : < / label>
<input id= " c o u r r i e l " type= " email " name= " c o u r r i e l " s p e l l c h e c k = " f a l s e " >
< / form>
<script>
document . getElementById ( ’ c o u r r i e l ’ ) . setCustomValidity ( " Alors quoi ,
on ne s a i t plus e n t r e r une adresse c o u r r i e l ? ? " ) ;
< / script>
Éric Hervet
- 47/128 -
Hiver 2014
INFO4007
VI.
Technologie de l’inforoute
VI.. Microformats
Microformats (Microdata)
Les microformats sont un moyen d’insérer des marquages sémantiques plus fins dans un document
HTML pour une exploitation automatique par des robots.
Essentiellement il s’agit d’introduire dans le code source HTML une notion sémantique du contenu
pour définir de quel vocabulaire relève certaines sections du contenu : recette de cuisine, curriculum
vitae, fiche de lecture d’un livre, etc.
VI.1.
Web sémantique
+ http://www.microformats.org/about
+ http://microformats.org/wiki/Main_Page
+ http://dev.w3.org/html5/md
+ http://www.whatwg.org/specs/web-apps/current-work/complete/microdata.html
VI.2.
API DOM Microdata
+ http://www.w3.org/TR/microdata/#using-the-microdata-dom-api
+ http://dev.w3.org/html5/md/#using-the-microdata-dom-api
+ http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#
microdata-dom-api
+ http://gitorious.org/microdatajs
+ http://microformatshiv.com
Éric Hervet
- 48/128 -
Hiver 2014
INFO4007
VII.
Technologie de l’inforoute
VII.. Audio & Vidéo
Audio & Vidéo
Aux débuts d’Internet, les débits disponibles étaient si faibles qu’il a fallu trouver des manières de
compresser les données (audio et/ou vidéo) pour obtenir des temps de transfert (téléchargement ou
streaming) raisonnables.
Avec le temps, de nombreux codecs (compression-décompression) ont vu le jour. Les formats se sont
succédés et la puissance et les algorithmes de compression se sont améliorés.
Aussi avec les parts de marché croissantes des sites de partage de musique et l’introduction de la
vidéo en streaming, de grands sites de partage vidéo ont vu le jour. Ainsi YouTube, Dailymotion et
Vimeo sont apparus à un mois d’intervalle début 2005. La technologie propriétaire Flash (d’abord
Macromedia, puis Adobe) est devenue de facto la plus utilisée mondialement. Adobe a en effet
profité du vide dans la spécification HTML pour ce genre de technologie. En effet avant HTML 5,
il fallait très souvent que l’utilisateur installe du côté client un plug-in et/ou des codecs pour être
capable de jouer des musiques mais surtout des vidéos dans une page HTML.
Récemment, le W3C et le WhatWG ont pris en compte cette évolution pour proposer une solution
concrète : les éléments <audio> et <video> de HTML 5 pour simplifier l’insertion dans les pages
web avec une lecture native dans le navigateur.
VII.1.
Conteneurs, codecs, licences et support
Dans la pratique, les choses ne sont pas simples, à cause de la grande variété de formats de fichier
et de conteneur. La problématique concerne surtout la multiplicité des solutions de décodage de la
vidéo. HTML 5 ne définit officiellement aucune norme précise à supporter au travers des éléments
<audio> et <video>.
Il faut savoir distinguer le conteneur, de la norme et du format de compression :
+ Un codec est un procédé de compression-décompression d’un signal numérique permettant de
générer un flux respectant une norme.
MPEG-4 AVC/H.264 est une norme décrivant un format de données, et x264 est un codec
répondant à cette norme.
+ Un conteneur est une structure de fichier permettant de regrouper (entrelacer) des flux audio
et vidéo, ayant chacun leur codec, ainsi que d’autres méta-informations (sous-titres, chapitrage,
etc.). Toutes les normes et tous les codecs ne peuvent pas être encapsulés dans chacun des conteneurs. En général, une extension de fichier (.ogg, .mp4, .mkv, .avi, etc.) fait référence
au conteneur et non au codec.
Les conteneurs sont complexes à mettre en oeuvre car ils doivent associer des données binaires
de natures différentes en conservant une cohérence pour une lecture directe ou notamment en
streaming, en intercalant des bouts d’audio et de vidéo à petits intervalles réguliers pour une
Éric Hervet
- 49/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
réception progressive par le réseau.
Quelques conteneurs populaires :
Nom
Extension Origine
Advanced Streaming Format
Audio Video Interleave
Flash Vidéo
Détails et affinités
.asf
Microsoft
Conteneur pour WMA, WMV, MPEG4, etc.
.avi
Microsoft
Ancien format limité en fonctionnalités.
.flv
.f4v
Matroska
.mkv
.mka
.mks
MP4 ou MPEG- .mp4
4 Part 14
.m4v
MPEG PS/TS
.mpg
.mpeg
.ps
Ogg
.ogg
.oga
.ogv
.ogx
QuickTime
.mov
Adobe
MPEG
Conteneur dédié au plug-in Flash pour flux dérivé du
H.264 ou VP6 (On2), PCM et MP3.
Conteneur pour de nombreux codecs : DivX, XviD,
H.264, Theora, VP8, Vorbis, AAC, MP3, AC3, DTS,
PCM, FLAC et sous-titres SubRip, VobSub, etc.
Dérivé de QuickTime, conteneur pour H.264/MPEG4 AVC, AAC, etc.
Conteneur pour de nombreux formats MPEG.
Xiph.org (format
libre)
Conteneur pour Theora, Vorbis et autres FLAC,
Speex, etc.
Apple
VOB
WebM
DVD Forum
Google (format
libre)
Conteneur pour de nombreux formats MPEG-1,
MPEG-2, MPEG-4, H.263, H.264, AAC, 3GPP, etc.
Pour les DVD (MPEG-2 et MPEG-1 Audio Layer II).
Conteneur pour VP8 et Ogg Vorbis dérivé de Matroska.
.vob
.webm
Matroska.org
(format libre)
ISO
Les normes et codecs vidéo courants sont : MPEG-1, MPEG-2, MPEG-4, H.264/MPEG-4, AVC,
DivX (dérivé de H.263 et H.264), Ogg Theora, VC-1, VP8, WebM, WMV (Windows Media Video de
Microsoft), XviD, etc.
Les codecs audio courants sont : MP3 (MPEG-1/2 Audio Level III), AAC, APE, FLAC, Ogg Vorbis,
WMA (Windows Media Audio de Microsoft), RealAudio, AC3, DTS, PCM (.wav), etc.
VII.1.1.
Vidéo
Actuellement, il existe trois leaders dans le domaine de la vidéo pour le web.
+ Theora
Prévu initialement comme format par défaut dans la spécification HTML 5, il a été retiré dû à
des conflits entre membres ayant des intérêts dans des formats concurrents.
On le retrouve majoritairement dans le conteneur Ogg. Il est issu du format libre, sans brevets,
Éric Hervet
- 50/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
défendu à l’origine par Mozilla puis implémenté par Opera et Google Chrome. Il est basé sur le
codec libre VP3 de On2 Technologies. Ogg Vorbis est son jumeau pour l’audio.
+ WebM
WebM est soutenu par Mozilla, Opera et surtout Google qui en est à l’origine.
Son conteneur est dérivé de Matroska et son codec vidéo de VP8, une autre réalisation de On2,
racheté par Google en 2010 avec l’intention de le libérer de ses brevets. Son utilisation est
désormais totalement gratuite, libre de tous droits. L’audio est encodé en Ogg Vorbis. Sa qualité
est équivalente au H.264.
Autres ressources et décodeurs WebM :
http://code.google.com/p/webm/
+ H.264
Aussi dénommé MPEG-4/AVC, le format H.264 est mis en avant par Apple pour Safari et ses
plates-formes mobiles sous iOS. Internet Explorer 9 l’implémente grâce à la balise <video>.
Son avantage est de fournir une bonne qualité d’image même à bas débit, grâce à différents
profils qui définissent chacun des paramètres pour la compression et la décompression des flux
(puissance, résolution, fonctionnalités, etc.). Il est répandu dans les moyens de diffusion en
haute définition et lu par des nombreux mobiles et consoles de jeu avec décodage matériel.
Son principal inconvénient est qu’il dépend directement d’un partenariat nommé The Joint
Video Team et de groupes possédant des intérêts économiques, dont le consortium MPEG 29 .
Soumis à des brevets logiciels, il oblige le paiement de droits d’exploitation pour les programmes qui le produisent ou le lisent. On le retrouve dans les disques Blu-Ray.
Afin de contrer l’intérêt pour les codecs libres, le consortium MPEG a décidé d’accorder une
gratuité d’usage de la licence jusqu’en 2015 pour les vidéos non payantes. Après cette
date, rien n’empêchera les ayant droits de réclamer de substantielles royalties. C’est pourquoi
Mozilla et Opera n’ont pas souhaité le prendre en considération.
Cependant, Mozilla propose pour reconnaître le H.264+AAC+MP3, de le faire non pas via un
codec embarqué dans le navigateur, mais via les couches du système d’exploitation, par exemple
GStreamer sous Linux ou Windows Media Foundation pour Vista et versions supérieures, et
également à partir de la version 4 d’Android.
Google a implémenté cette méthode dans Chrome mais a annoncé vouloir d’en défaire à moyen
terme pour promouvoir WebM et empêcher la naissance d’un monopole.
On estime qu’en 2013 plus de 85% des vidéos disponibles sur Internet étaient en H.264.
Historique
+ MOV, AVI, ASF et WMV sont des formats peu compressés. MOV vient du monde Apple, AVI,
ASF et WMV de Microsoft.
29. Moving Pictures Expert Group.
Éric Hervet
- 51/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
Le format MOV (quicktime MOVies, créé en 1992) est un format propriétaire qu’Apple a
commencé à diffuser gratuitement en 1994 hors du monde MAC, pour concurrencer le format
AVI de Microsoft. Le format MOV présentait alors une taille bien moins importante à une
époque où le format MPEG n’était pas aussi répandu qu’actuellement. Avec la démocratisation
du format MPEG adopté notamment pour les DVD 30 s, Apple se devait de s’ajuster : l’idée de
compresser les données ne doit pas de faire au détriment de la qualité. Ainsi, Quicktime 6
a permis de lire des vidéos Haute Résolution avec un son de qualité CD 31 et avec une taille
nettement plus accessible que le format AVI. Il supporte aussi le format MPEG4 (vidéo) et
l’AAC 32 (audio). Les grands du cinéma l’ont adopté, ainsi George Lucas a d’abord proposé la
bande annonce de « StarWars Episode 1 » en qualité QT5 (avant de la proposer en MPEG,
le monde L INUX /U NIX ayant été longtemps démuni de lecteur QT5). D’autres suivent : « Wild
wild west », « The world is not enough », « Austin Powers 2 », etc. Autre qualité face au MPEG :
le streaming. Q UICKTIME 7 (2005) supporte aussi le nouveau format pour la haute définition,
l’H.264.
Un fichier Q UICKTIME contient une ou plusieurs pistes, chacune comportant un type de
données particuliers : audio, vidéo, effet ou texte (par exemple sous-titres). Chaque piste
contient une piste média, c’est-à-dire un flux (stream) codé numériquement (grâce à un codec
tel que Cinepak, Sorenson, MP3, MJPEG, DivX, etc.) ou une référence à un média situé dans
un autre fichier ou sur un réseau.
Le terme codec provient des mots COmpression et DÉCompression. Il s’agit d’un procédé permettant de compresser et de décompresser un signal audio ou vidéo, le plus souvent en temps
réel, du moins pour la décompression. Le procédé peut être logiciel ou matériel. Par extension, un codec est alors le logiciel ou le circuit qui contient cet algorithme.
Les algorithmes de compression de données permettent généralement de réduire la taille du
fichier original par des facteurs allant de 2 à 100, voire plus pour certaines applications.
La compression se fait soit avec des algorithmes purement mathématiques de compression de
données sans perte d’information (Ex. : fichier ZIP ou GZIP) ou par des algorithmes prenant
en compte les caractéristiques des données à compresser et qui ôtent des informations considérées comme « non pertinentes ».
La compression audio Ogg Vorbis par exemple, compresse le son suivant des critères « psychoacoustiques » en tenant compte des fréquences non ou peu audibles du spectre sonore telles
que les harmoniques et les fréquences très aiguës. C’est une compression dite « destructive » ou
« avec perte », car elle perd des informations sonores.
Les codecs vidéo MPEG, D IV X ou X VI D par exemple, utilisent des algorithmes prenant en
compte la persistance rétinienne, la différentiation des couleurs par l’oeil et d’autres « imperfections » de la vue pour compresser de manière à éliminer des détails que l’être humain ne perçoit
presque pas en temps normal. Il s’agit aussi de compression avec perte.
Un conteneur accepte tels ou tels codecs audios et vidéos, et permet la présence d’une ou
30. Digital Video Disc.
31. Compact Disc.
32. Advanced Audio Coding.
Éric Hervet
- 52/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
plusieurs pistes audios, de sous-titres intégrés ou non, de chapitres, et éventuellement d’autres
informations. Certains formats de fichiers désignent à la fois le conteneur et le codec, d’autres
uniquement le conteneur et d’autres uniquement le codec. À cela s’ajoute la notion de support :
disque dur, disque optique CD ou DVD, mémoire flash, etc. Les principaux conteneurs actuels
sont : AVI, M ATROSKA (.mkv), Q UICKTIME, R EAL M EDIAV IDEO, D IV X, etc.
Le format AVI 33 a été présenté par Microsoft en 1992 comme élément de la vidéo pour la
technologie de Windows. Dans un fichier AVI, chaque composante audio ou vidéo peut être
compressée par n’importe quel codec. Le format D IV X est souvent utilisé comme codec vidéo
et le format MP3 comme codec audio, mais d’autres codecs peuvent être utilisés, comme X VI D
ou MPEG pour la vidéo, et MP2 ou WAV pour l’audio. Le format AVI permet de réunir en un
seul fichier une piste vidéo et jusqu’à 99 pistes audios, ce qui permet par exemple d’utiliser
plusieurs langues pour un même film.
Le format ASF 34 est à la fois un format et un codec vidéo développé par Microsoft et très
utilisé en streaming. Sa version haute définition est implantée sur les HD-DVD de NEC et
Blu-Rays de Sony.
Le format WMV 35 est une famille de codecs vidéo propriétaires développés par Microsoft.
D’une part en concurrence avec la norme MPEG-4/H.264, et d’autre part étant obligé, par les
consortiums industriels, de présenter un codec standardisé, Microsoft a soumis le codec WMV9
à la SMPTE 36 pour le standardiser sous le nom de VC-1. En 2005, le codec VC-1 devient stable
et se adopte un statut de standard international.
Un des effets pervers de l’ouverture par Microsoft des spécifications de leur codec, est que les
autres compagnies du domaine ont pu se rendre compte que Microsoft avait bel et bien pillé
dans les brevets de standards existants comme MPEG-2 et MPEG-4/H.264.
+ MPEG : format très compressé, adopté pour les CDs vidéo, DVDs et la TV numérique.
Les réunions du Moving Picture Experts Group ont démarré en 1988 dans le but de développer
un premier standard, MPEG-1, pour des applications de stockage audio/vidéo du type Video
CD. MPEG a ensuite rapidement produit un second standard, MPEG-2, visant essentiellement
les applications liées à la télévision numérique. D’autres familles de standards ont depuis été
produites, MPEG rassemblant un nombre croissant de spécialistes provenant de l’industrie de
l’électronique, de l’informatique et des télécommunications.
MPEG a développé les standards suivants :
* MPEG-1 (1988) : leur premier standard audio et vidéo utilisé plus tard comme standard
des CDs vidéo et qui inclut le populaire format audio MPEG-1 Layer 3 (MP3). Ce format
33.
34.
35.
36.
Audio Video Interleave.
Advanced Streaming Format.
Windows Media Video.
Society of Motion Picture and Television Engineers.
Éric Hervet
- 53/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
offre une résolution à l’écran de 352 x 240 pixels avec un débit d’environ 1,5 Mbit/s.
* MPEG-2 (1994) : standard couvrant le codage de l’audio et de la vidéo, ainsi que leur
transport pour la télévision numérique : télévision numérique par satellite, télévision numérique par câble, télévision numérique terrestre, et (avec quelques restrictions) pour les
vidéo-disques DVDs ou SVCDs. C’est notamment le format utilisé actuellement pour la
TV sur ADSL 37 . Les débits habituels sont de 2 à 6 Mbit/s pour la résolution SD et de 15
à 20 Mbit/s pour la résolution HD.
* MPEG-4 : norme comblant le vide des bas débits (jusqu’à 2 Mbit/s) pour lesquels MPEG-2
n’avait pas été développée. Introduite en 1998, MPEG-4 est une norme de codage d’objets
audio et vidéo.
MPEG-4 est d’abord conçue pour gérer le contenu de scènes comprenant un ou plusieurs
objets audio-vidéo. Contrairement à MPEG-2 qui visait uniquement des usages liés à la
télévision numérique, les usages de MPEG-4 englobent toutes les nouvelles applications
multimédia comme le téléchargement et le streaming sur Internet, le multimédia sur mobile, la radio numérique, les jeux vidéo, la télévision et les supports haute définition.
MPEG-4 a développé de nouveaux codecs audio et vidéo et enrichit les contenus multimédia en ajoutant de nouvelles technologies comme VRML 38 (présentations 3D), des
fichiers composites orientés-objet (incluant des objets audio, vidéo et VRML), le support
pour la gestion des droits numériques et plusieurs types d’interactivité.
MPEG-4 se décompose en une suite de normes, les parties, qui spécifient un type de codage particulier. Dans chaque partie plusieurs profils (collection d’algorithmes) et niveaux
(contraintes quantitatives) sont définis. Un consortium industriel désirant utiliser MPEG4 choisit une ou plusieurs parties de la norme et, pour chaque partie, il peut sélectionner
un ou plusieurs profils et niveaux correspondant à ses besoins.
Il existe plus de 20 parties de MPEG-4, décrivant entre autre la synchronisation et le multiplexage de la video et de l’audio, la compression pour les signaux vidéo, la compression
pour le codage perceptuel et les signaux audio, les tests de conformité, les logiciels de référence de la norme, le DMIF 39 , les implémentations optimisées, les méthodes de transport
de MPEG-4 sur IP, le codec avancé de compression vidéo appelé aussi H.264 ou AVC 40 ,
les extensions de gestion et de protection de la propriété intellectuelle (IPMP), le format
de fichier du codec AVC, la compression et transmission de polices de caractères, etc.
* MPEG-7 : un standard pour décrire et chercher du contenu multimédia.
* MPEG-21 : MPEG décrit ce futur standard comme un Multimedia Framework.
Tout l’art de MPEG est d’utiliser des algorithmes utilisant à la fois des méthodes de compression spatiale et temporelle.
37.
38.
39.
40.
Asymmetric Digital Subscriber Line.
Virtual Reality Modeling Language ou Virtual Reality Markup Language.
Delivery Multimedia Integration Framework.
Advanced Video Codec.
Éric Hervet
- 54/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
La compression spatiale est à la fois spectrale et prédictive : on applique d’abord une transformation DCT 41 . Puis, dans une image donnée, la valeur d’un pixel est « prédite » à partir d’un
groupe de pixels voisins ; seule la différence entre la valeur prévue et la valeur réelle est codée.
On obtient ainsi une valeur souvent proche de zéro, ce qui permet de la coder avec peu de bits.
La compression temporelle combine un codage par différences entre des images successives et
une prédiction de mouvement : on analyse les changements d’une image à l’autre en étudiant les
changements spatiaux et le mouvement par blocs de pixels. Certains blocs restent inchangés,
d’autres subissent de légers déplacements, d’autres sont totalement modifiés. On déduit de la
succession de plusieurs images un vecteur de mouvement par bloc, appelé compensation de
mouvement. À partir de ces éléments, on obtient trois sortes d’images : les images Intra (I),
codées intégralement, avec compression spatiale bien sûr. Elles servent de référence pour les
autres images. Il y a une image I au début de chaque plan et une au moins toutes les 12 images.
Les images Prédictives (P), codées par prédiction temporelle, à la fois par différence spatiale
avec les images déjà codées et avec prédiction de mouvement. Les images Bidirectionnelles (B),
obtenues par interpolation à partir des images I et P situées avant et après et en utilisant les
vecteurs de mouvement.
F IGURE 1 – Les différents types d’images dans une séquence vidéo MPEG.
+ R EALV IDEO, format créé spécifiquement pour l’utilisation de vidéos sur Internet.
Conçu par R EAL N ETWORKS, le format R EALV IDEO s’est largement imposé aux débuts des
vidéos en streaming. R EALV IDEO 9 offrait des taux de compression très élevés et une qualité
d’image excellente.
C’est surtout sur le plan commercial que ce format a fini par décliner : Si le lecteur R EAL P LAYER était gratuit, les propositions régulières de mise à jour vers l’édition payante, plus
complète, ont fini par lasser les utilisateurs.
VII.1.2.
Audio
Actuellement, il existe aussi trois leaders dans le domaine de l’audio pour le web.
41. Discrete Cosine Transform.
Éric Hervet
- 55/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
+ MP3 (MPEG-1 Audio Layer III)
Introduit en 1991, il est devenu très populaire et aussi controversé, provoquant l’essor de la
musique numérique sur internet. Il faut savoir que ce format est toujours soumis à des
brevets, même s’il est lu par tous les lecteurs portables du marché et qu’il existe des dizaines
de programmes pour compresser de l’audio en MP3.
La plupart des conteneurs vidéo supportent un flux audio MP3 sur deux canaux. La norme
définit la façon dont il est décodé mais laisse libre le choix des algorithmes d’encodage. Il
existe donc plusieurs méthodes de compression avec des résultats variables. Par exemple on
peut jouer sur les paramètres de qualité affectant directement la bande passante nécessaire à
la transmission (de 32 à 320 kpbs, mono ou stéréo, débit (bitrate) variable ou constant).
+ AAC (Advanced Audio Coding)
L’AAC fournit une meilleure qualité que MP3 à débit équivalent avec la possibilité de contenir jusqu’à 48 canaux. Il a été choisi par Apple pour iTunes et comporte des profils dont le
fonctionnement est équivalent à celui de H.264 pour la compression et la lecture.
C’est un format soumis aussi à des brevets logiciels. On le trouve généralement dans un
conteneur MP4, supporté par les produits Apple et Adobe Flash.
+ Vorbis
Vorbis est à l’audio ce que Theora est à la vidéo. Il est libre de droits et dispose d’atouts techniques qui le placent largement au-dessus de MP3 avec par défaut une compression à débit
variable.
On le retrouve dans des conteneurs tels que WebM dont il est l’unique format audio, et MP4 ou
Matroska.
+ Opus
En septembre 2012 est apparu un nouveau codec open source nommé Opus (http://
opus-codec.org/). De nombreux espoirs sont fondés sur les capacités techniques de ce codec
conçu spécifiquement pour le Web : pouvoir fonctionner à un très bas débit, avec une grande
réactivité, pour des débits très variables, autant pour la parole que pour la musique.
Ce codec peut être accueilli dans un conteneur Ogg et est supporté par Firefox 15+.
Parmi les outils de conversion, MiroVideoConverter est l’un des plus simples à utiliser et
permet de cibler aussi les mobiles sous iOS et Android.
Historique
+ MIDI (Musical Instrument Digital Interface), le format le plus léger, apparu en 1982. Il
s’agit d’une reconstitution de musique note par note grâce à une carte son.
Pour décrire une note, le format MIDI utilise quelques octets seulement : le ton de la note (sol,
la, si, do, ...), son intensité (fort, pas fort), le numéro du canal sur lequel l’interpréter (à chaque
Éric Hervet
- 56/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
canal correspond un instrument) et éventuellement quelques autres informations telles que la
synchronisation, des glissendo, l’aftertouch (seconde pression sur une touche sans la relâcher),
des vibratos, etc. Tandis qu’un CD musical, pour décrire une note, donne l’intensité du signal à
intervalles très courts (généralement 44000 fois par secondes - 44 kHz), dans le format MIDI
le timbre de la note n’est pas communiqué, seul l’ordre de jouer cette note est transmis. Il
faut donc absolument un “synthétiseur” pour interpréter les ordres d’un fichier MIDI (carte
son). L’avantage du format MIDI est la très petite taille des fichiers pour plusieurs minutes de
musique. L’inconvénient est de disposer d’un synthétiseur de la meilleure qualité possible.
+ WAV (Waveform Audio File Format) : enregistrement sonore non compressé (CDs audio).
Pour numériser le son, on mesure à intervalles de temps réguliers (fréquence d’échantillonnage) les variations de l’onde sonore que l’on quantifie selon une certaine échelle de valeurs
possibles (sur 8 bits : 256 valeurs possibles, sur 16 bits : 65536 valeurs possibles). Plus la fréquence d’échantillonnage est élévée et plus l’échelle de quantification est grande, meilleure est
la modélisation.
F IGURE 2 – Échantillonnage du son.
Le choix de la fréquence d’échantillonnage et de la profondeur de quantification influencent
directement le volume des données numérisées et la fidélité de la numérisation : un équilibre
est à trouver entre taille du fichier numérique et qualité du son.
Une qualité CD audio standard est une numérisation à 44.1KHz, en 16 bits et en stéréo. Soit
2 ∗ 16 ∗ 44100 = 1411200 bits/s, soit 172.3 Ko/s, soit 10.1 Mo pour une minute de son.
+ MP3 (MPEG-1 Audio Layer 3) et R EAL A UDIO : formats compressés. MP3 dispose d’une
excellente qualité sonore, R EAL AUDIO favorise la compression et donc la rapidité de téléchargement.
MP3 est un format de compression avec pertes et permet de compresser jusqu’à 1/12ème du
format CD audio par exemple. La compression MPEG-1 Layer 3 consiste à retirer des données
Éric Hervet
- 57/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
audio les fréquences inaudibles pour l’auditeur moyen dans des conditions habituelles d’écoute.
La compression vise à analyser les composantes spectrométriques d’un signal audio et de leur
appliquer un modèle psycho-acoustique pour ne conserver que les sons “audibles”. L’oreille
humaine est capable de discerner, en moyenne, des sons entre 0.02 kHz et 20 kHz, sachant
que sa sensibilité est maximale pour des fréquences entre 2 et 5 kHz. Après compression, un
algorithme de codage (donc sans perte) est appliqué, permettant de gagner 20% d’espace
supplémentaire (codage des sons redondants). Il s’agit du codage de Huffman.
Le format R EAL AUDIO permet de diffuser du son en direct sur Internet (streaming). Il s’agit
d’un format propriétaire lancé en 1995 par la société RealNetworks. Le streaming consiste à
envoyer le son par vague, c’est-à-dire par petites séquences. Il est ainsi possible de suivre un
concert, une entrevue, la diffusion d’une radio en direct sur Internet. Cette technologie n’est
limitée que par l’éventuelle surcharge d’un site qui détériore considérablement la qualité de
réception. La société RealNetworks offre différents lecteurs gratuits ou non selon les fonctionnalités offertes (http://www.real.com). Pour créer des fichiers au format R EAL AUDIO,
RealNetworks propose RealEncoder (gratuit) et RealProducer (payant).
La compression utilisée par le format R EAL AUDIO ressemble à MPEG mais les algorithmes
utilisés sont propriétaires. La qualité du R EAL AUDIO est nettement inférieure à celle du MP3
et il est souvent impossible de télécharger le contenu pour le rejouer par la suite.
+ AAC (Advanced Audio Coding) : format de compression avec perte dérivé du format
MPEG-4 et qui offre un meilleur ratio que MP3.
Le format AAC offre des taux d’échantillonnage (bitrates) entre 16kbps et 320kbps, la norme
étant 128kbps et permet de coder le signal original à des fréquences différentes (variable
bitrates) selon les caractéristiques locales du signal. AAC permet aussi de jouer du son sur 48
canaux différents.
AAC est reconnu comme étant un des meilleurs formats en terme de ratio qualité/compression.
Ceci dit, le format MP3 offre également une version optimisée appelée LAME 42 qui donne
une qualité comparable. Mais en ce qui concerne les fréquences d’échantillonnage (bitrates),
un fichier audio au format MP3 encodé à 128kbps est équivalent en qualité à un fichier au
format AAC encodé à 64kbps. Ceci explique la récente et montante popularité du format AAC,
notamment sur les radios internet.
+ FLAC (Free Lossless Audio Codec) : format libre de compression audio sans perte (même
principe que ZIP mais dédié à l’audio).
FLAC utilise le codage de Golomb-Rice et la prédiction linéaire pour convertir les échantillons
en une série de blocs non corrélés d’environ 100ms.
Les taux de compression varient de 30% à 70% selon la source : plus le signal est constitué
d’ondes régulières (sons naturels), meilleure est la compression. Par contre, un signal aléatoire
42. LAME Ain’t an MP3 Encoder
Éric Hervet
- 58/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
(bruit) ne se compresse pas très bien.
Un fichier audio au format FLAC possède généralement l’extension .flac ou .fla. À l’heure
actuelle de plus en plus de logiciels pour lire (décoder) de la musique acceptent le format FLAC
(WinAMP, Windows Media Player, XMMS, Rhythmbox, etc.).
Également de plus en plus d’appareils audio (devices) (cinémas maison, lecteur portables, etc.).
Plusieurs logiciels permettent aussi de créer (encoder) des fichiers au format FLAC (WinAMP,
DbPowerAMP, Media Jukebox, Exact Audio Copy, etc.).
VII.2.
Outils d’encodage et de conversion
+ Handbrake - Convertisseur multiplateforme, licence GPL.
http://handbrake.fr/
+ MiroVideoConverter - Convertisseur multiformat, licence Open Source.
http://www.mirovideoconverter.com/
+ Ffmpeg - Librairie de conversion, Open Source.
http://fmpeg.org/
+ Ffmpeg2Theora - Librairie de conversion pour Ogg Theora.
http://v2v.cc/~j/ffmpeg2theora/
+ Firefogg - Extension Firefox.
http://firefogg.org/
+ VLC - Lecteur et encodeur multiplateforme, Open Source.
http://www.videolan.org/vlc/
+ The Lame Project - Encodeur MP3, licence LGPL.
http://lame.sourceforge.net/
+ OggConvert - Encodeur Ogg, licence LGPL.
http://oggconvert.tristanb.net/
+ Audacity - Lecteur et encodeur audio, OpenSource.
http://audacity.sourceforge.net/
VII.3.
Balises média & attributs
<audio> et <video> se comportent de la même façon et ont beaucoup d’attributs en commun. La
plupart du temps, l’attribut src suffit et il est conseillé d’utiliser l’attribut alt en cas de non support
Éric Hervet
- 59/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
par le navigateur.
< ! −− Une image −−>
<img src= " image . jpeg " a l t = "Mon image " >
< ! −− Une vidéo −−>
<video src= " ma_video .webm" a l t = "Ma vidéo " >
< ! −− Un son −−>
<audio src= " ma_musique . mp3" a l t = "Ma musique " >
Ressources pour HTML 5 Audio et Vidéo :
+ W3C :
http://www.w3.org/TR/html5/video.html#audio
http://www.w3.org/TR/html5/video.html#video
+ WhatWG :
http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#audio
http://www.whatwg.org/specs/web-apps/current-work/complete/video.html#video
+ Conteneurs/formats vidéo :
http://wiki.whatwg.org/wiki/Video_type_parameters
<video> et <audio> peuvent inclure une balise <source> pour :
+ Pouvoir proposer plusieurs formats de fichiers avec chacun un attribut type différent, pour
désigner le type MIME et éventuellement le codec à utiliser.
+ Pouvoir proposer un format de fichier mieux adapté selon l’appareil de consultation (ordinateur,
tablette, téléphone mobile), avec l’attribut media et une media query.
Le navigateur choisit alors d’utiliser la source la plus appropriée selon ces critères.
<video>
<source src= " video . mp4" type= " video / mp4" >
<source src= " video . 3 gp " type= " video / 3 gp " media= " handheld " >
<source src= " video . ogv " type= " video / ogg ; codecs=theora , v o r b i s " >
<source src= " video .webm" type= " video /webm; codecs=vp8 , v o r b i s " >
Ce navigateur ne supporte pas l ’ élément <code>video< / code>
< / video>
Éric Hervet
- 60/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
<video> et <audio> peuvent aussi inclure une balise <track> pour le support de « pistes de texte
synchronisées », la plupart du temps des sous-titres.
<track> est important pour :
+ Fournir des sous-titres et légendes aux personnes malentendantes ;
+ Fournir des audio-descriptions aux personnes malvoyantes ;
+ Afficher des traductions aux personnes ne comprenant pas la langue parlée ;
+ Afficher les paroles d’une chanson (karaoké) ;
+ Donner la possibilité de naviguer par chapitres ou de rechercher « dans » la vidéo.
<track kind= " c a p t i o n s " src= " s o u s t i t r e s . v t t " >
Le WhatWG recommande l’usage du format WebVTT qui permet :
+ L’application de styles CSS (balise <c> et pseudo-élément ::cue) ;
+ L’utilisation de balises (<i>, <b>, <u>) ;
+ Le positionnement (étiquettes T : horizontal, A : alignement, L : vertical, S : taille du texte, D :
direction) ;
+ L’intégration de caractères internationaux (grâce à Ruby).
Exemple ~ :
<video src= " video .webm" id= " mavideo " >
<track kind= " s u b t i t l e s " src= " video . f r . v t t " s r c l a n g = " f r "
label= " Français " d e f a u l t >
<track kind= " c a p t i o n s " src= " video . f r . cap . v t t " s r c l a n g = " f r "
label= " Français pour malentendants " >
<track kind= " s u b t i t l e s " src= " video . en . v t t " s r c l a n g = " en "
label= " English " >
<track kind= " s u b t i t l e s " src= " video . sp . v t t " s r c l a n g = " sp "
label= " Spanish " >
<track kind= " d e s c r i p t i o n s " src= " video . f r . desc . v t t " s r c l a n g = " f r "
label= " D e s c r i p t i o n t e x t e " >
< / video>
Une API JavaScript via TextTrack est prévue pour accéder aux contenus de la balise <track> et
pour gérer des événements appropriés.
Exemple :
var video = document . getElementById ( "mavideo" ) ;
var track = video . textTracks [ 0 ] ;
Éric Hervet
- 61/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VII.. Audio & Vidéo
track . mode = TextTrack .SHOWING; // HIDDEN, SHOWING ou DISABLE
track . oncuechange = function ( e )
{
// ...
};
http://www.w3schools.com/tags/ref_av_dom.asp
Attributs pour <audio> et <video>
+ src
+ width et height
Zone d’affichage pour la vidéo.
+ controls
Attribut booléen pour activer/désactiver la présence des contrôles visuels à l’écran.
+ poster
Pour indiquer une image de substitution à afficher en place de la vidéo avant la lecture. (N’existe
pas pour <audio>.)
+ autoplay
Déclenche la lecture automatiquement (aussitôt que le média est prêt).
+ preload
Pour précharger le fichier média dès la consultation du document HTML. Les valeurs possibles
sont : auto (charge la totalité du média), metadata (charge uniquement les méta-informations),
none (ne précharge rien).
+ loop
Pour lire indéfiniment le média en boucle.
+ mediagroup
Pour regrouper plusieurs médias et les synchroniser.
VII.4.
Interface de contrôle et événements
L’intérêt majeur de <audio> et <video> réside dans leur capacité à être contrôlés via le DOM JavaScript. Ils implémentent tous les deux l’interface HTML Media Element qui confère la gestion des
événements, des propriétés accessibles en modification ou en lecture seule.
http://www.w3schools.com/html/html5_audio.asp
http://www.w3schools.com/html/html5_video.asp
VII.5.
Prise en charge par les navigateurs
Navigateur
Version
Navigateur
Version
Mozilla Firefox
Internet Explorer
Apple Safari
Google Chrome
Opera
3.5+
9.0+
4.0+
3.0+
10.5+
Android
iOS
Opera Mobile
Opera Mobile
2.3+
1.0+
11+
-
Éric Hervet
- 62/128 -
Hiver 2014
INFO4007
VIII.
Technologie de l’inforoute
VIII.. HTML5 Canvas
HTML5 Canvas
Canvas est une API de dessin 2D, puissante alternative de Flash et Java pour la conception en ligne
d’images fixes ou animées, à l’aide de formes ou de tracés pixel par pixel.
http://dev.w3.org/html5/spec/the-canvas-element.html
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
http://www.w3schools.com/html/html5_canvas.asp
http://abaque.ca/~eric/h14/info4007/exemples/canvas
VIII.1.
Élément <canvas>
Exemple (interaction HTML5/JavaScript) :
<canvas id= " dessin " width= " 640 " height= " 480 " >
Texte a l t e r n a t i f pour l e s navigateurs qui ne supportent pas canvas .
< / canvas>
<script >
var dess = document . getElementById ( ’dessin’ ) ;
var c t x = dess . getContext ( ’2d’ ) ;
c t x . f i l l S t y l e = "red" ;
c t x . f i l l R e c t ( 2 0 , 30 , 100 , 5 0 ) ;
</ s c r i p t >
Éric Hervet
- 63/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
VIII.2.
Formes géométriques
VIII.3.
Chemins
VIII.4.
Styles, remplissages, couleurs
VIII.5.
Dégradés
VIII.6.
Transformations
VIII.7.
Images
VIII.8.
Pixels
VIII.9.
Texte
VIII.10.
Ombrages
VIII.11.
Transparence, composition & masques
VIII.12.
Contrôle clavier & souris
VIII.13.
Animation et jeux
VIII.14.
3D : WebGL
VIII.. HTML5 Canvas
Avant l’arrivée de Canvas, plusieurs tentatives ont été menées pour introduire la 3D dans le monde
du web, toujours avec des extensions propriétaires et des langages variés : VRML 43 (1994), X3D,
basé sur XML (2001), Cult3D, etc.
http://www.khronos.org/webgl
<canvas> permet l’utilisation de WebGL, très proche d’OpenGL ES 2.0 pour le Web et adapté
à JavaScript. WebGL s’efforce de fonctionner nativement dans les navigateurs, sans extension
supplémentaire, et avec accélération matérielle si possible.
Exemple :
http://helloracer.com/webgl
http://www.chromeexperiments.com/webgl
http://mrdoob.github.com/three.js (Bibliothèque 3D pour Canvas)
http://www.c3dl.org (Bibliothèque 3D JS)
43. Virtual Reality Markup Language.
Éric Hervet
- 64/128 -
Hiver 2014
INFO4007
VIII.15.
Technologie de l’inforoute
VIII.. HTML5 Canvas
Graphisme vectoriel : SVG
SVG 44 est un format d’images vectorielles décrit en XML. Il ne repose pas sur les mêmes principes
que Canvas. C’est un ensemble de balises qui décrivent le contenu d’une image à l’aide de formes
simples.
Contrairement aux images matricielles, ces formes peuvent être redimensionnées, manipulées de
différentes façons, sans subir d’altération, car le moteur de rendu recalcule à chaque fois le contenu
de la zone d’affichage d’après les informations fournies initialement.
Par contre, les tracés étant définis en XML, cela signifie que les éléments SVG sont de véritables éléments DOM, accessibles et pouvant être indexés par les moteurs de recherche. Cela
signifie aussi que la description du contenu d’une image complexe peut vite se révéler très verbeuse.
Le format SVG devrait être utilisé plutôt pour les formes simples et l’interaction ; tandis que Canvas
est plus performant pour les dessins et les animations.
http://abaque.ca/~eric/h14/info4007/exemples/svg
44. Scalable Vector Graphics.
Éric Hervet
- 65/128 -
Hiver 2014
INFO4007
IX.
Technologie de l’inforoute
IX.. Géolocalisation
Géolocalisation
Avec les ordinateurs, téléphones intelligents, tablettes, etc. connectés en permanence à Internet,
la capacité de fournir avec une précision relative sa propre position géographique, par rapport à
l’environnement et aux autres usagers, a pris tout son intérêt.
De nombreuses applications ont vu le jour :
+ Recherches contextualisées ;
+ Calculs de positions ou d’itinéraires sur une carte ;
+ Partages de localisations géographiques dans les réseaux sociaux.
Différentes méthodes de positionnement existent :
+ Par GPS 45 (et bientôt Galileo) ;
+ Par triangulation dans un réseau de téléphonie sans fil (GSM, 3G, LTE, etc.) ;
+ Par triangulation de réseaux WiFi/RFID/Bluetooth à portée ;
+ Par adresse IP : il existe des bases de données telles que Google Location Services qui établissent
des correspondances entre blocs d’adresses IP délivrées géographiquement par l’IANA 46 puis
par les fournisseurs d’accès à Internet.
IX.1.
Principe
La géolocalisation repose sur des informations très simples : les coordonnées de latitude, de longitude et d’altitude.
F IGURE 3 – Source : http://www.meteo16-vars.com/images/latitudelongitude.jpg
45. Global Positioning System.
46. Internet Assigned Numbers Authority.
Éric Hervet
- 66/128 -
Hiver 2014
INFO4007
IX.2.
Technologie de l’inforoute
IX.. Géolocalisation
Technique
L’ensemble des instructions doit être déclaré dans un élément <script>. La géolocalisation fait appel
à l’objet geolocation, membre de navigator (ou window.navigator).
http://www.w3.org/TR/geolocation-API
<script >
i f ( navigator . g e o l o c a t i o n )
{
// API disponible.
}
else
{
// Pas de support.
}
</ s c r i p t >
Il existe deux manières de déclencher la géolocalisation à partir de l’objet geolocation : avec la
méthode getCurrentPosition() pour une requête unique, ou avec la méthode watchPosition()
pour un suivi continu de la position.
Exemple avec getCurrentPosition() :
function a f f i c h e P o s i t i o n ( p o s i t i o n ) // (2)
{
// Afficher la position dans la page ou sur une carte
}
...
navigator . g e o l o c a t i o n . getCurren t Po s it io n ( a f f i c h e P o s i t i o n ) ; // (1)
getCurrentPosition() (1) retourne immédiatement et tente de réunir les informations de manière
asynchrone avant d’appeler (2) la fonction de callback affichePosition() et de lui fournir un objet
de type Position contenant ces données.
Exemple avec watchPosition() :
function s u r v e i l l e P o s i t i o n ( p o s i t i o n )
{
// Rafraîchir régulièrement la position affichée
// dans la page ou sur une carte.
}
var survId = navigator . g e o l o c a t i o n . watchPosition ( s u r v e i l l e P o s i t i o n ) ; // (1)
// Pour annuler la surveillance continue
function annuler ( )
Éric Hervet
- 67/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
IX.. Géolocalisation
{
navigator . g e o l o c a t i o n . clearWatch ( survId ) ; // (2)
}
watchPosition() renvoie un identifiant de ressource (1), qui permet d’annuler le suivi continu avec
(2) la fonction clearWatch(). On fait aussi appel à une fonction de callback pour récupérer un objet
Position.
Un objet Position contient des attributs accessibles en lecture seule : timestamp : date à laquelle
la position a été acquise ; et coords : les coordonnées.
L’attribut coords, de type Coordinates, contient les champs suivants :
1. latitude ;
2. longitude ;
3. accuracy : coefficient de précision ;
4. altitude (optionnel) ;
5. altitudeAccuracy : précision sur l’altitude (optionnel) ;
6. heading : direction (optionnel) ;
7. speed : vitesse (optionnel).
Exemple :
http://abaque.ca/~eric/h14/info4007/exemples/geolocation/exemple1.html
Éric Hervet
- 68/128 -
Hiver 2014
INFO4007
X.
Technologie de l’inforoute
X.. File API
Interactions avec les fichiers (File API)
http://www.w3.org/TR/FileAPI
http://www.w3.org/TR/file-system-api
X.1.
Principe
Le W3C définit plusieurs interfaces pour la manipulation du système de fichiers :
+ File : pour accéder aux propriétés du fichier(nom, type, taille, emplacement) ;
+ FileList : pour représenter une séquence de fichiers, sélectionnés par l’élément <input
type="file"> ou glissés-déposés depuis le système d’exploitation vers le navigateur ;
+ Blob : pour accéder au contenu binaire brut d’un fichier (Binary Large Object) ;
+ FileReader : pour lire le contenu d’un fichier ou d’un objet Blob en mémoire ;
+ FileWriter : pour écrire un fichier ;
+ FileWriterSync : pour modifier un fichier de manière synchrone dans un Web Worker ;
+ FileSaver : pour sauver un Blob dans un fichier et en surveiller la progression ;
+ BlobBuilder : pour construire un Blob depuis une chaîne de texte ;
+ FileError et FileException : pour gérer les erreurs et exceptions pouvant survenir ;
+ FileSystem : pour accéder au système de fichier et à son arborescence.
Il existe aussi l’API ProgressEvents pour connaître l’état de progression lors de l’envoi d’un fichier,
et l’API Drag & Drop pour les phases de glisser-déposer.
X.2.
Fonctionnement
< ! −− Pour un s e u l f i c h i e r : −−>
<input type= " f i l e " name= " mon_fichier " >
< ! −− Pour des f i c h i e r s m u l t i p l e s : −−>
<input type= " f i l e " name= " mon_fichier " multiple= " true " >
< ! −− Pour des f i c h i e r s de type connu : −−>
<input type= " f i l e " name= " mon_fichier " accept= " image / jpeg " >
< ! −− ou : −−>
<input type= " f i l e " name= " mon_fichier " accept= " image / jpeg , image / g i f , image / png " >
< ! −− ou : −−>
<input type= " f i l e " name= " mon_fichier " accept= " image / * " >
Après que le ou les fichiers ont été sélectionnés, l’événement onchange de l’élément <input> est
déclenché.
Éric Hervet
- 69/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
X.. File API
<input type= " f i l e " name= " f i c h i e r s " onchange= " analyse ( t h i s . f i l e s ) " multiple>
<script>
f u n c t i o n analyse ( f i c h i e r s )
{
// ...
}
< / script>
La structure de données recueillie par la fonction comprend un tableau donnant accès aux propriétés
des fichiers : name ou fileName (nom), size ou fileSize (taille en octets) et le type MIME type.
<input type= " f i l e " name= " f i c h i e r s " id= " f i c h i e r s "
onchange= " analyse ( t h i s . f i l e s ) " multiple>
<div id= " i n f o s " >< / div>
<script>
f u n c t i o n analyse ( f i c h i e r s )
{
if ( fichiers )
{
var i n f o s = document . getElementById ( " i n f o s " ) ;
var nbFichiers = f i c h i e r s . length ;
var t a i l l e T o t a l e = 0 ;
i n f o s . innerHTML = " <p> I l y a <b> " +nbFichiers+ " </b> f i c h i e r s < / p> " ;
i n f o s . innerHTML += " <ul > " ;
f o r ( i =0; i <nbFichiers ; i ++)
{
i n f o s . innerHTML += " < l i > " + f i c h i e r s [ i ] . name+ " ( " + f i c h i e r s [ i ] . type+ " ) < / l i > " ;
t a i l l e T o t a l e += f i c h i e r s [ i ] . size ;
}
i n f o s . innerHTML += " </ ul > " ;
i n f o s . innerHTML += " <p>Total : <b> " +Math . round ( t a i l l e T o t a l e /1024)+ " </b> Ko< / p> " ;
}
}
</ script>
X.3.
Lecture avec FileReader
+ readAsArrayBuffer(blob) : renvoie le contenu au format ArrayBuffer ;
+ readAsBinaryString(blob) : renvoie le contenu au format BinaryString ;
Éric Hervet
- 70/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
X.. File API
+ readAsText(blob,encoding) : renvoie le contenu au format texte (le paramètre encoding est
optionnel) ;
+ readAsDataURL(blob) : renvoie le contenu au format DataURL.
Exemple :
http://abaque.ca/~eric/h14/info4007/exemples/files/exemple2.html
X.4.
Upload simple avec PHP
X.5.
Upload avec XMLHttpRequest2
L’objet XMLHttpRequest est un module particulier de JavaScript reconnu par tous les navigateurs
récents pour dialoguer avec un serveur HTTP sans devoir recharger complètement une page. Des
données peuvent être envoyées et reçues par une requête POST ou GET. Des améliorations de l’objet
initial XMLHttpRequest introduit en 2006 ont été apportées pour simplifier son usage, diminuer
les différences d’implémentation et le rendre plus puissant avec le transfert de données binaires :
« XMLHttpRequest Level 2 ».
http://www.w3.org/TR/XMLHttpRequest2/
Exemple complet :
http://abaque.ca/~eric/h14/info4007/exemples/files/exemple3.html
Éric Hervet
- 71/128 -
Hiver 2014
INFO4007
XI.
Technologie de l’inforoute
XI.. Drag & Drop
Gestion du glisser-déposer (Drag & Drop)
Le glisser-déposer est monnaie courante sur le web. Il fait appel aux attributs draggable, dropzone
et DataTransfer.
XI.1.
Principe
HTML 5 propose une API native performante pour le glisser-déposer, qui repose sur trois fondamentaux :
+ Quel élément peut être glissé : en lui assignant l’attribut draggable ;
+ Quel élément sert de cible et de réception des informations : en lui assignant l’attribut dropzone
et en lui attachant des événements DOM pour savoir lorsqu’un élément la survole ou y est
déposé ;
+ Quel est le comportement dynamique à associer : avec JavaScript et les gestionnaires d’événements, l’action appropriée doit être déclenchée.
XI.2.
Événements et attributs
Les événements DOM pour le glisser-déposer sont :
+ dragstart : début du déplacement (glisser) ;
+ drag : en cours de déplacement ;
+ dragend : fin de déplacement ;
+ dragenter : entrée dans la cible ;
+ dragover : en cours de survol de la cible ;
+ dragleave : sortie de la cible ;
+ drop : action de déposer.
L’utilisation de tous ces événements n’est pas nécessaire, certains ayant essentiellement un rôle
d’agrément visuel sur la zone de réception (dragenter, dragover, dragleave).
+ drag est déclenché continuellement lorsqu’un élément draggable est déplacé (que le pointeur
de souris soit en mouvement ou non) ;
+ dragover est déclenché continuellement lorsque l’élément draggable est maintenu au-dessus
de la cible et son comportement par défaut doit être désactivé pour signifier au navigateur qu’il
est possible de déposer « dans » l’élément survolé ;
+ La spécification prévoit l’attribut dropzone pour l’élément devant recevoir l’événement drop ;
+ Tous les navigateurs ne supportent pas ces fonctionnalités natives de la même manière
. . . notamment Internet Explorer.
Éric Hervet
- 72/128 -
Hiver 2014
INFO4007
XI.3.
Technologie de l’inforoute
XI.. Drag & Drop
Glisser (Drag)
L’attribut draggable peut s’assigner à presque tous les éléments HTML. Par défaut, la plupart des
moteurs de rendu considèrent « draggable » les éléments <img> (images) et <a href ...> (liens).
< ! −− Une image −−>
<img src= " image . jpeg " a l t = " Image " draggable= " true " >
< ! −− Des éléments de l i s t e −−>
<ul>
< l i draggable= " true " >Premier< / l i >
< l i draggable= " true " >Deuxième< / l i >
< / ul>
< ! −− Une s e c t i o n −−>
< s e c t i o n class= " ma_classe " draggable= " true " > . . . < / s e c t i o n >
Le glisser-déposer étant une action très visuelle, il est fréquent d’utiliser des feuilles de styles pour :
+ Symboliser le caractère « draggable » d’un élément, notamment en modifiant l’apparence du
pointeur de souris via la propriété CSS cursor:move ;
+ Symboliser la zone où un élément peut être déposé, par exemple avec une couleur de fond via
background ou une bordure spécifique via border ;
+ Dimensionner la cible, par exemple avec width et height ;
+ Symboliser le survol actif de la zone cible.
Aussi il est fréquent avec CSS d’empêcher la sélection du texte des éléments qu’on souhaite déplacer
à la souris. Ceci se fait en affectant la valeur none à user-select pour tous les éléments auxquels
l’attribut draggable a été assigné ([draggable=true]).
XI.4.
Déposer (Drop)
Le dépôt consiste à :
+ Définir quelle zone du document HTML est en mesure de recevoir un élément glissé, en lui
assignant un attribut dropzone ;
+ Prendre en charge l’événement drop généré par cette action ;
+ Savoir quelle information on veut retirer de l’élément déposé : un texte, une image, un lien, un
ensemble d’éléments, un fichier, etc.
L’attribut dropzone peut comporter un et un seul des mots-clés suivants :
+ copy : indique que le dépôt d’un objet autorisé sur l’élément résultera en une copie des données
déplacées ;
Éric Hervet
- 73/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XI.. Drag & Drop
+ move : indique que le dépôt d’un objet autorisé sur l’élément correspondra à un déplacement
direct des données ;
+ link : indique que le dépôt d’un objet autorisé sur l’élément résultera en un lien vers les données
initiales.
Exemple :
<div id= " drop " dropzone= " copy f i l e : image / jpeg f i l e : image / png f i l e : image / g i f " >
< / div>
Cependant, la présence de l’attribut dropzone ne définit pas l’action réelle du point de vue du DOM
et des données, qui dépend de l’événement drop et de la fonction JavaScript associée.
L’événement dragenter est déclenché à l’arrivée sur la cible tandis que dragleave est déclenché à
la sortie.
Il est important de désactiver l’événement dragover car le comportement par défaut des navigateurs
est de refuser tout dépôt. Pour cela, il faut utiliser event.preventDefault() pour les événements
dragover, dragenter et compléter par return false; pour s’assurer que la désactivation s’effectue
pour tous les navigateurs.
XI.5.
Interface DataTransfer
L’API est complétée par l’interface DataTransfer qui joue le rôle de porteur d’information en
HTML 5. Elle stocke les données en provenance de l’élément déplacé (événement dragstart) et les
communique à la cible réceptrice (événement drop). C’est par la propriété event.dataTransfer du
DOM qu’on accède à l’interface DataTransfer.
L’événement dragstart est déclenché dès que l’objet est déplacé et met à disposition sa propriété
dataTransfer pour :
+ Définir quel effet de déplacement est autorisé (move, copy, link) avec la propriété
dataTransfer.effectAllowed ;
+ Mémoriser les données et les rendre disponibles pour tous les autres événements déclenchés
pour le drag & drop avec la méthode setData().
Le premier argument de la méthode setData() reçoit le type de données mémorisées et le second
les données.
Au dépôt sur la cible réceptrice, l’interface DataTransfer permet de retrouver les informations
mémorisées grâce à la méthode getData(), qui bien sûr doit se déclencher à l’événement drop.
L’événement dragend déclenché à la fin d’un glisser-déposer est exploitable pour retirer du DOM
l’élément d’origine s’il ne faut pas en conserver de copie.
Exemple complet :
http://abaque.ca/~eric/h14/info4007/exemples/drag_n_drop/exemple1.html
Éric Hervet
- 74/128 -
Hiver 2014
INFO4007
XI.6.
Technologie de l’inforoute
XI.. Drag & Drop
Glisser-déposer de fichiers
Exemple complet :
http://abaque.ca/~eric/h14/info4007/exemples/drag_n_drop/exemple2.html
XI.7.
Prise en charge
http://www.w3schools.com/html/html5_draganddrop.asp
http://html5demos.com/drag#
Éric Hervet
- 75/128 -
Hiver 2014
INFO4007
XII.
Technologie de l’inforoute
XII.. Événements “Push”
Événements envoyés par le serveur (“Push”)
Les Server-Sent Events (SSE) (événements envoyés par le serveur) sont une manière de transmettre
de l’information depuis le serveur vers le navigateur, par notifications ponctuelles ou continues.
C’est bien le navigateur qui initie la connexion et qui reste à l’écoute du serveur qui peut alors
envoyer des messages au format texte dans le flux ouvert.
XII.1.
Principe
Une fois que la connexion a été établie par le navigateur web, les informations parviennent à la
page HTML depuis le serveur sous forme d’événements DOM. Lorsqu’un événement message est
reçu par le navigateur, une fonction (callback) peut être déclenchée pour prendre connaissance
des données transmises et en faire quelque-chose. Cette méthode élimine la nécessité d’interroger
continuellement le serveur.
Dans le cas de notifications envoyées par le serveur à intervalles réguliers ou via des flux de données continus, ceci impose l’utilisation d’un serveur web capable de maintenir un grand nombre de
connexions simultanées.
Les serveurs web qui sont orientés événements, tels que Node.js ou Nginx, sont plus performants
pour répondre à cette contrainte.
http://www.wikivs.com/wiki/apache_vs_nginx
Le format d’échange entre navigateur et serveur est basé sur du texte simple, quel que soit le langage
utilisé côté serveur (PHP, .NET, Java, Python, Ruby, etc.). Cette API est nommée EventSource.
XII.2.
Technique
Côté client (navigateur)
Il faut instancier un objet de type EventSource et mettre en place un gestionnaire d’événement
message pour la réception.
var sse = new EventSource ( ’event-source.php’ ) ;
// Gestionnaire d’événement
sse . onmessage = function ( event )
{
c o n s o l e . l o g ( event . data ) ;
};
Remarque : la déclaration du gestionnaire d’événement peut aussi être faite gràce à
addEventListener() :
var sse = new EventSource ( ’event-source.php’ ) ;
// Gestionnaire d’événement
Éric Hervet
- 76/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XII.. Événements “Push”
sse . addEventListener ( ’message’ , function ( event )
{
c o n s o l e . l o g ( event . data ) ;
} , false ) ;
Côté serveur
La première chose à faire est de servir le flux avec le type MIME text/event-stream. En PHP, cela
peut se faire avec la fonction header() :
header ( " Content −Type : t e x t / event − stream " ) ;
Le contenu doit être encodé en UTF-8. Il peut être délivré par les méthodes classique d’affichage
texte, comme echo ou print() en PHP.
<?php
header ( ’ Content −Type : t e x t / event − stream ’ ) ;
echo ’ data : ’ . time ( ) . PHP_EOL;
?>
Le code ci-dessus envoie le timestamp Unix du serveur (nombre de secondes depuis le 1er janvier
1970). Les fins de lignes acceptées sont CRLF (\r\n), CR (\r) et LF (\n). La constante PHP_EOL est
prévue pour cela.
EventSource permet d’envoyer progressivement des données et donc de recevoir plusieurs événements sans fermer la connexion.
Exemple complet :
http://abaque.ca/~eric/h14/info4007/exemples/push/exemple1.html
Plusieurs lignes data: peuvent se suivre consécutivement, elles sont rassemblées par le navigateur
dans l’événement d’un unique message reçu, séparées par des retours à la ligne. Par contre un
double saut de ligne provoque la fermeture des instructions data: précédentes, générant alors deux
événements DOM distincts.
http://abaque.ca/~eric/h14/info4007/exemples/push/exemple2.html
http://www.w3schools.com/html/html5_serversentevents.asp
Éric Hervet
- 77/128 -
Hiver 2014
INFO4007
XIII.
Technologie de l’inforoute
XIII.. JavaScript
JavaScript et DOM
Le DOM est une interface de programmation pour tous les documents et pages web HTML (ou
XML). Au chargement d’un document HTML, un arbre de la page est élaboré via le DOM.
Chaque élément est considéré comme un objet et peut jouer le rôle de noeud auquel on
peut attacher les qualités de parent, enfin, orphelin ou frère.
http://www.w3.org/DOM
http://www.w3.org/TR/selectors-api
XIII.1.
Bases du langage
+ Variables : avec le mot-clé var
var a = 3 ;
var b = 4 ;
var c ;
a l e r t ( a*b ) ;
// ou bien :
c o n s o l e . l o g ( a * b ) ; // pour afficher dans la console JavaScript
+ Types simples
var tableau = Array ( "Un" , "Deux" , "Trois" ) ;
c o n s o l e . l o g ( tableau [ 0 ] ) ; // "Un"
c o n s o l e . l o g ( tableau [ 2 ] ) ; // "Trois"
var len = tableau . length ; // 3
var ldeux = tableau [ 1 ] . length ; // 4
+ Objets
var personne = {
age : 20 ,
prenom : "Alain" ,
nom : "Ternet" ,
etudes : {
programme : "BIA" ,
année : 4
}
};
var p = personne . etudes . programme ;
c o n s o l e . l o g ( personne ) ; // Affichage dans la console sous forme d’arbre
Certains objets sont prédéfinis et souvent utilisés dans un navigateur :
window ; // interface DOMWindow
Éric Hervet
- 78/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIII.. JavaScript
window . document ; // interface Document
window . navigator ; // interface Navigator
window . navigator . userAgent ; // de type String
Un objet est une instance de classe.
// Syntaxe générale :
var o b j = new Object ( ) ;
// Exemple :
var s = new String ( "QQCHOSE" ) ;
s . t o S t r i n g ( ) ; // Retourne "QQCHOSE"
+ Fonctions
function type_navigateur ( )
{
c o n s o l e . l o g ( window . navigator . userAgent ) ;
}
function a d d i t i o n ( a , b )
{
return a+b ;
}
var c = a d d i t i o n ( 2 , 3 ) ;
console . log ( c ) ;
+ Boucles
var tab = Array (1900 , 4350 , 1650 , 1 4 9 2 ) ;
var sum = 0 ;
f o r ( var i = 0 ; i < tab . length ; i ++)
sum += tab [ i ] ;
c o n s o l e . l o g (sum ) ;
sum = 0 ;
var i = tab . length − 1;
while ( i >= 0 )
{
sum += tab [ i ] ;
i ++;
}
c o n s o l e . l o g (sum ) ;
XIII.2.
Méthodes de sélection DOM
+ getElementById()
Éric Hervet
- 79/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIII.. JavaScript
<h1 id= " t i t r e " >HTML 5< / h1>
<script>
var element = document . getElementById ( " t i t r e " ) ;
a l e r t ( element . textContent ) ;
< / script>
+ getElementsByTagName() Renvoie un ensemble d’éléments dont le type est indiqué en argument ("img", "video", etc.).
La fonction renvoie des objets de type nodeList.
var elements = document . getElementsByTagName ( "img" ) ;
elements . item ( 1 ) ;
// ou bien :
elements [ 1 ] ;
+ getElementsByClassName()
+ querySelector() (nouveau)
Retourne le premier élément qui correspond au sélecteur CSS en argument.
var element = document . q u e r y S e l e c t o r ( "#menu␣ul␣li.sousmenu" ) ;
+ querySelectorAll() (nouveau)
Retourne tous les éléments qui correspondent au sélecteur CSS en argument.
var t i t r e s = document . q u e r y S e l e c t o r A l l ( "article>h1" ) ;
var l i g n e s P a i r e s = document . q u e r y S e l e c t o r A l l ( "table␣tr:nth-child(even)" ) ;
XIII.3.
Propriétés et méthodes DOM
+ innerHTML : contenu HTML d’un élément (string).
+ outerHTML : contenu HTML et l’élément lui-même (string).
+ textContent ou innerText : contenu texte simple (string).
+ style : ensemble des propriétés CSS de l’élément (CSSStyleDeclaration).
+ style.* : propriétés CSS individuelles, accessibles par des membres écrits en camelCase :
style.width, style.fontSize, style.listStyleType, etc. (string).
+ tabindex : indice de tabulation (long).
+ id : valeur de l’attribut id (string).
+ lang : valeur de l’attribut lang (string).
+ title : valeur de l’attribut title (string).
+ tagName : type de l’élément (nom de la balise) (string).
+ className : valeur de l’attribut de classe assigné à l’élément (string).
+ classList (nouveau) : énumération des classes individuelles présentes dans l’attribut class
(DOMTokenList).
Éric Hervet
- 80/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIII.. JavaScript
+ childNodes : liste des noeuds enfants contenus dans l’élément (NodeList).
+ firstChild : premier noeud enfant (HTMLElement).
+ lastChild : dernier noeud enfant (HTMLElement).
+ parentNode : noeud parent (HTMLElement).
+ nextSibling : noeud frère suivant (HTMLElement).
+ prevSibling : noeud frère précédent (HTMLElement).
+ attributes : attributs de l’élément (NamedNodeMap).
+ getAttribute(attr) : renvoie la valeur de l’attribut attr.
+ setAttribute(attr,val) : modifie la valeur de l’attribut attr par val.
+ removeAttribute(attr) : supprime l’attribut attr si celui-ci existe.
+ focus() : donne le focus à l’élément.
+ blur() : retire le focus.
XIII.4.
Manipulation DOM
+ createElement()
var nouveauDiv = document . createElement ( "div" ) ;
nouveauDiv . innerHTML = "<p>Je␣suis␣<b>nouveau</b>!</p>" ;
+ appendChild()
var paragraphe = document . createElement ( "p" ) ;
paragraphe . innerHTML = "Je␣suis␣<b>nouveau</b>␣!" ;
document . body . appendChild ( paragraphe ) ;
+ removeChild()
var paragraphe = document . q u e r y S e l e c t o r ( "body>p" ) ;
document . body . removeChild ( paragraphe ) ;
+ insertBefore()
var nouveauLi = document . createElement ( "li" ) ;
nouveauLi . innerHTML = "Je␣suis␣<b>nouveau</b>␣!" ;
var uneListe = document . getElementsByTagName ( "ul" ) [ 0 ] ;
uneListe . i n s e r t B e f o r e ( nouveauLi , uneListe . l a s t C h i l d ) ;
+ createTextNode()
var nouveauTexte = document . createTextNode ( "C’est␣beau␣le␣DOM" ) ;
document . q u e r y S e l e c t o r ( "body" ) . appendChild ( nouveauTexte ) ;
+ classList() (nouveau)
var monElement = document . getElementById ( "resultat" ) ;
monElement . c l a s s L i s t . add ( "positif" ) ;
Éric Hervet
- 81/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIII.. JavaScript
+ insertAdjacentHTML() (nouveau)
<ul id= " maliste " >
< l i >Premier< / l i >
< l i >Deuxième< / l i >
< / ul>
<script>
var uneListe = document . getElementById ( " maliste " ) ;
uneListe . insertAdjacentHTML ( " beforeend " , " < l i >Dernier < / l i > " ) ;
< / script>
XIII.5.
Méthodes pour formulaires
+ value : retourne la valeur du champ. Peut-être modifié aussi.
+ checked : true si coché, false sinon (booléen).
+ files : liste des fichiers sélectionnés. null si ce n’est pas un champ d’entrée de fichiers.
(FileList).
+ valueAsDate : peut être modifié pour changer la valeur (Date).
+ valueAsNumber : peut être modifié pour changer la valeur (Number).
+ list : retourne l’élément datalist indiqué par l’attribut list (HTMLElement).
+ selectedOption : retourne l’option de liste sélectionnée (HTMLElement).
+ stepUp(n) : incrémente la valeur de n.
+ stepDown(n) : décrémente la valeur de n.
XIII.6.
Gestionnaire d’événements
Un gestionnaire d’événement JavaScript est, en général, déclaré pour un noeud HTML :
<button id= " bouton1 " value= " Cliquez ! " >
<script>
var objetBouton1 = document . getElementById ( ’ bouton1 ’ ) ;
objetBouton1 . o n c l i c k = f u n c t i o n ( event )
{
/ / event c o n t i e n t l e s p r o p r i é t é s de l ’ événement
}
< / script>
La
spécification
DOM Level 2 prévoit deux méthodes addEventListener()
removeEventListener() pour ajouter ou retirer une fonction associée :
Éric Hervet
- 82/128 -
et
Hiver 2014
INFO4007
Technologie de l’inforoute
XIII.. JavaScript
<button id= " bouton1 " value= " Cliquez ! " >
<script>
var objetBouton1 = document . getElementById ( ’ bouton1 ’ ) ;
objetBouton1 . addEventListener ( " c l i c k " , f u n c t i o n ( event )
{
/ / event c o n t i e n t l e s p r o p r i é t é s de l ’ événement
} , f a l s e ) ; / / f a l s e = phase de capture
< / script>
Autres fonctions utiles :
+ setInterval(fct,ms) : exécute la fonction fct toutes les ms millisecondes. Renvoie un objet
utilisable avec clearInterval().
+ clearInterval(intv) : supprime un intervalle créé par setInterval(). intv : référence renvoyée par setInterval().
+ setTimeout(fct,ms) : exécute la fonction fct après ms millisecondes. Renvoie un objet utilisable avec clearTimeout().
+ clearTimeout(to) : efface un timeout programmé avec setTimeout(). to : référence renvoyée
par setTimeout().
+ document.print() : appelle la boîte de dialogue d’impression du document.
+ alert(txt) : affiche un pop-up d’alerte.
XIII.7. matchMedia() et Media Queries
Les Media Queries CSS permettent d’utiliser des mots-clés définissant quels styles sont appliqués,
parfois dynamiquement, aux éléments en fonction des paramètres d’affichage : résolution, média,
orientation, etc.
i f ( window . matchMedia ( ’screen␣and␣(max-width:480px)␣and␣(orientation:portrait)’ ) . matches )
{
// On sait qu’on dispose de moins de 480 pixels de large en portrait
}
https://github.com/paulirish/matchMedia.js
http://wickynilliams.github.com/enquire.js
Éric Hervet
- 83/128 -
Hiver 2014
INFO4007
XIV.
Technologie de l’inforoute
XIV.. Web Sockets
Communication en temps réel (Web Sockets)
Les communications en temps réel sont une nécessité et il a fallu que le monde du web s’adapte
à ce qui existe depuis longtemps au niveau des couches des systèmes d’exploitation : des canaux
bidirectionnels (« sockets ») avec le protocole TCP/IP.
L’API Web Sockets propose l’accès à de tels canaux directement dans les navigateurs, avec bien
sûr des gestionnaires d’événements en JavaScript. Elle permet des connexions persistantes et
bidirectionnelles pour des applications web qui ont besoin de communiquer en temps réel avec le
serveur : chat (« clavardage »), diffusion d’informations sans attente (cours de la Bourse), jeux en
réseau, notifications immédiates, flux de données variées, etc.
AJAX, grâce à l’objet XMLHttpRequest, est une tentative dans ce sens, mais c’est toujours le
navigateur qui doit initier une nouvelle connexion, formuler une requête pour savoir si de nouvelles
données sont disponibles, auquel cas les recevoir et fermer la connexion après le chargement de la
page.
Avec les Web Sockets, les entêtes pour établir une connexion sont réduits au strict minimum. Le serveur peut envoyer des données de sa propre initiative pour faire du push tandis que le « socket web »
reste en permanence à l’écoute.
XIV.1.
Protocole commun
Handshake
Le client lance une connexion qui peut passer par le port 80 du web classique. Puis il effectue une
requête qui requête qui ressemble à HTTP mais qui permet ensuite, grâce à un entête spécifique
(Upgrade: websocket), de communiquer au serveur qu’il veut basculer totalement sur Web-Socket.
C’est ce qu’on appelle une « poignée de main » (handshake) qui permet au navigateur et au serveur
de se mettre d’accord sur le protocole de dialogue.
Exemple de requête client :
GET /url HTTP/1.1
Host: abaque.ca
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDW==
Sec-WebSocket-Version: 13
Origin: http://abaque.ca
Exemple de réponse du serveur :
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Éric Hervet
- 84/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIV.. Web Sockets
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Des clés de sécurité sont échangées dans d’autres entêtes.
Côté serveur, il faut un service approprié à l’écoute des connexions. De nombreuses solutions
existent, en Java, PHP, Ruby, C# et en JavaScript avec Node.js, très pratique grâce notamment
à sa programmation événementielle appropriée aux sockets, mais très bas niveau . . . Ceci dit, PHP
reste encore le langage le plus populaire à l’heure actuelle, à l’aide de la librairie phpwebsock.
http://code.google.com/p/phpwebsocket
phpwebsocket
Exemples :
http://abaque.ca/~eric/h14/info4007/exemples/websockets/websocket.demo.php
http://abaque.ca/~eric/h14/info4007/exemples/websockets/websocket.mini.php
La création d’un socket se fait en instanciant un objet WebSocket, qui prend en argument une
adresse d’écoute IPv4 et un port associé.
Côté navigateur :
http://abaque.ca/~eric/h14/info4007/exemples/websockets/Client.html
La connexion se fait grâce à un objet ws de type WebSocket. Le constructeur prend en argument
l’adresse de connexion, par le protocole ws://.
L’envoi d’un message se fait par l’appel de ws.send().
La réception d’un message se fait par une fonction de callback associée à l’événement message, pour
lequel on peut redéfinir la propriété onmessage de l’interface WebSocket.
Node.js
Node.js est une API JavaScript qui s’exécute côté serveur, et qui exécute des tâches asynchrones
(fonctions callbacks associées à des événements).
http://nodejs.org
http://fr.wikipedia.org/wiki/Nodejs
http://www.nodebeginner.org/#javascript-and-nodejs
http://www.journaldunet.com/developpeur/expert/56253/node-js---la-tendance-javascript-cote-serveur.shtml
http://fr.openclassrooms.com/informatique/cours/des-applications-ultra-rapides-avec-node-js
XIV.2.
Librairies alternatives
+ Socket.IO
http://socket.io
http://labs.learnboost.com/socket.io
+ Web-Socket-js
http://github.com/gimite/web-socket-js
Éric Hervet
- 85/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XIV.. Web Sockets
+ EasyWebSocket
http://easywebsocket.org
Éric Hervet
- 86/128 -
Hiver 2014
INFO4007
XV.
Technologie de l’inforoute
XV.. Web Storage
Stockage des données locales (Web Storage)
Web Storage ou DOM Storage ajoute la capacité à un navigateur de stocker et organiser des
données locales. Ce concept, initialement intégré à la spécification HTML 5, fait maintenant partie
d’une spécification séparée.
http://www.w3.org/TR/webstorage
http://dev.w3.org/html5/webstorage
http://www.whatwg.org/specs/web-apps/current-work/complete/webstorage.html
L’avantage se situe au niveau des applications web qui mémorise une quantité relativement grande
de données sans devoir utiliser les cookies ou un échange permanent avec une base de données
distante. On peut ainsi gérer des données en mode déconnecté (offline), des profils, préférences
utilisateur, caches pour l’auto-complétion ou les résultats de recherche.
Web Storage met en oeuvre deux objets nommés sessionStorage et localStorage pour faire persister les données de l’utilisateur respectivement pendant la durée de la session, ou de manière
permanente. La capacité offerte est généralement de 5 Mo à 10 Mo par défaut et peut être modifiée
dans la configuration du navigateur.
XV.1.
Deux espaces de stockage
La manipulation des objets Web Storage se fait exclusivement par des scripts exécutés côté client
par le navigateur.
Il existe :
+ Pour Firefox :
un fichier SQLite webappstore.sqlite dans le profil utilisateur ;
+ Pour Chrome sous Windows :
AppData\Local\Google\Chrome\User Data\Default dans le profil utilisateur ;
+ Pour Safari sous Windows :
AppData\Local\Apple Computer\Safari\LocalStorage dans le profil utilisateur ;
+ Pour Internet Explorer :
Un fichier XML dans le profil utilisateur puis
Local Settings\Application Data\Microsoft\Internet Explorer\DOMStore.
+ Stockage de session
Le stockage de session (session storage) est destiné à la mémorisation de données à courte durée
de vie, dont la portée est limitée à la session active de la fenêtre ou de l’onglet du navigateur
ainsi qu’au domaine dont elles sont issues. On peut ainsi exécuter des applications web dans
différentes fenêtres ou onglets distincts avec des ensembles de données différents sans risque
d’interférences (ce qui n’est pas le cas des cookies).
Éric Hervet
- 87/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XV.. Web Storage
Les données sont effacées après la fermeture de la fenêtre ou de l’onglet et ne persistent pas.
À l’ouverture d’une nouvelle session (nouvelle fenêtre ou nouvel onglet), le navigateur initialise
un nouvel objet de stockage.
L’accès se fait via l’interface sessionStorage de type Storage, enfant direct de l’objet window,
ce qui signifie qu’il s’agit d’un objet global.
+ Local Storage
Le stockage local bénéficie d’une durée de vie plus longue puisqu’il n’est pas effacé à la fermeture
du navigateur. Sa portée est étendue à toutes les pages et tous les scripts provenant du même
domaine dont il est issu, donc à toutes les fenêtres et onglets ouverts exploitant des pages
hébergées avec le même nom de domaine.
Il est accessible via l’objet global localStorage de type Storage, enfant direct de l’objet window.
XV.2.
Interface Storage
Le modèle de données pour sessionStorage et localStorage est un tableau associatif de paires
clé/valeur, accessibles par les trois méthodes suivantes :
+ setItem(cle,valeur) : stocke une paire clé/valeur ;
+ getItem(cle) : retourne la valeur associée à une clé ;
+ removeItem(cle) : supprime la paire clé/valeur en indiquant le nom de la clé.
Toutes les valeurs sont de type chaîne de caractères (String).
L’interface Storage possède aussi une propriété length (nombre total de paires de clé/valeur) et de
deux méthodes supplémentaires :
+ key(index) : retourne la clé stockée à l’index spécifié ;
+ clear() : efface toutes les paires.
+ Stockage
// Mémorisation dans la session courante
s e s s i o n S t o r a g e . setItem ( "identifiant" , "eric_hervet" ) ;
// Mémorisation dans le stockage local
l o c a l S t o r a g e . setItem ( "derniere_visite" ,new Date ( ) ) ;
+ Lecture
// Lecture d’une clé de la session courante
var i d _ u t i l i s a t e u r = s e s s i o n S t o r a g e . getItem ( "identifiant" ) ;
Éric Hervet
- 88/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XV.. Web Storage
// Affichage
a l e r t ( "Identifiant␣utilisateur␣:␣"+ i d _ u t i l i s a t e u r ) ;
// Lecture d’une clé du stockage local
var d a t e _ v i s i t e = l o c a l S t o r a g e . getItem ( "derniere_visite" ) ;
// Affichage
i f ( d a t e _ v i s i t e != undefined )
{
a l e r t ( "Dernière␣visite␣:␣"+ d a t e _ v i s i t e ) ;
}
+ Suppression
// Suppression de l’élément de session "identifiant"
s e s s i o n S t o r a g e . removeItem ( "identifiant" ) ;
// Suppression de l’élément de stockage local "derniere_visite"
l o c a l S t o r a g e . removeItem ( "derniere_visite" ) ;
// Suppression totale
s e s s i o n S t o r a g e . c l e a r ( ) // Suppression de toutes les valeurs de session
l o c a l S t o r a g e . c l e a r ( ) // Suppression de toutes les valeurs de stockage local
Exemple :
http://abaque.ca/~eric/h14/info4007/exemples/storage
Il est recommandé de placer les instructions dans un bloc JavaScript try/catch pour attraper
d’éventuelles exceptions, le plus souvent dues à un dépassement de capacité de stockage :
+ Firefox : NS_ERROR_DOM_QUOTA_REACHED ;
+ Webkit (Chrome/Safari) : QUOTA_EXCEEDED_ERR ;
+ IE : Out of memory.
XV.3.
Utilisation de JSON
Le format JSON 47 permet de convertir la valeur de n’importe quel objet en chaîne de caractères
(String), en « linéarisant » en une seule chaîne toutes les propriétés de l’objet.
// Création d’un objet album avec plusieurs propriétés
var album = { } ;
47. JavaScript Object Notation.
Éric Hervet
- 89/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XV.. Web Storage
album . duree = 240;
album . p i s t e s = 1 ;
album . t i t r e = "I’ll␣be␣back" ;
album . a r t i s t = "Arnold␣S." ;
// Conversion avec JSON et stockage local
l o c a l S t o r a g e . setItem ( "album" , JSON. s t r i n g i f y ( album ) ) ;
// Déstockage et lecture
c o n s o l e . l o g (JSON. parse ( l o c a l S t o r a g e . getItem ( "album" ) ) ) ;
On peut aussi stocker des données binaires, par exemple des images, en les encodant en format
texte grâce au format Base64. Un élément <canvas> peut aussi être converti grâce à la méthode
toDataURL() qui cependant n’est pas reconnue sur tous les navigateurs.
http://hacks.mozilla.org/2012/02/saving-images-and-files-in-localstorage
XV.4.
Stocker un événement
Il est parfois utile de déclencher le stockage d’une variable sur un événement survenant dans la
page.
<p>
<label for= " prenom " >Prénom< / label>
<input type= " t e x t " id= " prenom " name= " prenom "
onchange= " l o c a l S t o r a g e . setItem ( t h i s . name , t h i s . value ) ; " >
< / p>
<p>
<input type= " checkbox " id= " c o n d i t i o n s "
onchange= " s e s s i o n S t o r a g e . setItem ( t h i s . id , t h i s . checked ) ; " >
<label for= " c o n d i t i o n s " >J ’ acc epte l e s c o n d i t i o n s < / label>
< / p>
<script>
/ / Valeurs par défaut au chargement
i f ( t y p e o f l o c a l S t o r a g e != ’ undefined ’ )
{
var prenom = l o c a l S t o r a g e . getItem ( ’ prenom ’ ) ;
i f ( prenom ) document . getElementById ( ’ prenom ’ ) . value = prenom ;
}
i f ( t y p e o f s e s s i o n S t o r a g e != ’ undefined ’ )
{
var e t a t = s e s s i o n S t o r a g e . getItem ( ’ c o n d i t i o n s ’ ) ;
Éric Hervet
- 90/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XV.. Web Storage
i f ( e t a t == ’ true ’ ) document . getElementById ( ’ c o n d i t i o n s ’ ) . checked = true ;
}
< / script>
Stockage à intervalles régulier
<p>
<textarea name= " t e x t e " id= " t e x t e " >< / textarea>
< / p>
<script>
var champ = document . getElementById ( " t e x t e " ) ;
/ / Si l a valeur de l a sauvegarde e s t présente au chargement
i f ( s e s s i o n S t o r a g e . getItem ( " sauvegarde " ) . length != n u l l )
{
/ / Alors on l a restaure
champ . value = s e s s i o n S t o r a g e . getItem ( " sauvegarde " ) ;
}
/ / Toutes l e s deux secondes (2000 ms)
setInterval ( function ( )
{
/ / Le champ t e x t e e s t mémorisé dans l e stockage de s e s s i o n
s e s s i o n S t o r a g e . setItem ( " sauvegarde " ,champ . value ) ;
} , 2000);
< / script>
L’API comprend l’événement storage qui doit être déclenchée lorsqu’une clé est modifiée. Cela permet d’envoyer une notification à d’autres onglets du navigateur, s’ils sont ouverts à la même adresse.
window . addEventListener ( "storage" , function ( event ) {
a l e r t ( "La␣clé␣"+event . key+"␣a␣été␣modifiée␣de␣"+
event . oldValue+ "␣à␣"+event . newValue ) ;
} , false ) ;
Éric Hervet
- 91/128 -
Hiver 2014
INFO4007
XVI.
Technologie de l’inforoute
XVI.. Bases de données
Bases de données (Indexed Database & Web SQL Database)
Au-delà de Web Storage, le besoin de stocker des données structurées dans la session du
navigateur se fait de plus en plus pressant dès lors qu’on veut un contrôle plus fin pour effectuer
des recherches, des tris, des mises à jour groupées, des sélections avec des mises en relation entre
l’une ou l’autre collection de données.
La technologie Web SQL Database exploite une base de données côté client. L’inconvénient est
qu’elle n’est plus maintenue par le W3C, celui-ci ayant jugé qu’il n’était pas de son rôle de spécifier
le langage SQL sous-jacent. Puis IndexedDB a pris le relais par une autre approche sans rapport
avec SQL.
Ces espaces de stockage permettent de conserver des données en quantité appréciable afin d’éviter
de les faire circuler sur le réseau. Ils remplacent avantageusement les échanges fréquents entre
serveur et client, basés sur les cookies, les formulaires ou XMLHttpRequest.
De par leur structure, ils autorisent le tri, le filtre et la recherche.
Web SQL est un système de base de données relationnelle tandis qu’IndexedDB est un système
de tables indexées.
XVI.1.
Indexed Database
Indexed Database est un standard de stockage de données structurées et indexées, pensé pour JavaScript. Elle est conçue pour stocker des objets, c’est-à-dire des paires de clé/valeur. Chaque type
d’objet peut être recueilli dans un catalogue (Object Store). Il n’y a pas de notion de tables structurées en lignes et colonnes : une base contient un ou plusieurs catalogues qui eux-mêmes contiennent
des objets. Chaque catalogue peut posséder des index pour effectuer des requêtes et itérer sur des
jeux de résultats.
Le tout se déroule dans des transactions par l’utilisation d’événements DOM pour savoir lorsque les
résultats d’une requête sont disponibles en mode asynchrone.
Il s’agit bien d’une approche NoSQL dans la mesure où les jointures doivent être faites par le code.
Le modèle d’exécution comprend plusieurs étapes :
+ Ouvrir une base ;
+ Débuter une transaction ;
+ Créer un catalogue d’objets ;
+ Effectuer une ou plusieurs requêtes (insertion, sélection, etc.) ;
+ Attendre la fin de l’opération avec l’écoute d’un événement DOM ;
+ Traiter les résultats reçus.
Exemples :
http://abaque.ca/~eric/h14/info4007/exemples/indexeddb/exemple1.html
Éric Hervet
- 92/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XVI.. Bases de données
https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb
Éric Hervet
- 93/128 -
Hiver 2014
INFO4007
XVII.
Technologie de l’inforoute
XVII.. CSS3
CSS3
CSS3 adopte une approche modulaire pour étendre les possibilités de CSS2 et apporter de nouvelles
fonctionnalités. CSS3 peut être divisé en cinq grandes catégories :
+ Fonds d’écrans/bordures
+ Couleurs
+ Media Queries
+ Mise en page multi-colonnes
+ Sélecteurs
XVII.1.
Sélecteurs
+ Sélecteur d’élément
Exemples : nav { }, p { }, ul { }
Éléments concernés : <nav>, <p>, <ul>
+ Sélecteur de classe
Exemples : .classe { }, div.classe { }
Éléments concernés : tout élément portant l’attribut class="classe" ; <div class="classe"
+ Sélecteur d’id
Exemples : #intro { }, header#intro { }
Éléments concernés : tout élément portant l’attribut id="intro" ; <header id="intro"
+ Sélecteur d’attribut
Exemples : [alt] { }, input[type=submit] { }, [rel=nofollow] { }
Éléments concernés : tout élément portant un attribut alt ; <input type="submit"> ; Tout
élément portant l’attribut rel="nofollow"
+ Sélecteur d’enfant direct
Exemples : ul>li { }
Tout élément <li> enfant direct d’un <ul>
+ Sélecteur d’élément adjacent
Exemples : h1+p { }
Tout élément <p> immédiatement précédé par un élément <h1>
+ Sélecteur d’éléments frères
Exemples : h2∼p { }
Un ou plusieurs éléments <p> précédés par un élément <h2>
Les sélecteurs peuvent s’enchaîner, séparés par des espaces, pour combiner leurs effets. Séparés par
des virgules, ils s’appliquent à une énumération de plusieurs familles d’éléments.
nav ul > l i { . . . }
#intro p . classe { . . . }
nav ul > l i , # i n t r o p . c l a s s e { . . . }
Éric Hervet
- 94/128 -
Hiver 2014
INFO4007
XVII.2.
Technologie de l’inforoute
XVII.. CSS3
Propriétés
Les propriétés CSS sont des paires clés :valeurs.
http://www.w3schools.com/css
XVII.3.
Pseudo-classes et pseudo-éléments
Ils servent à affiner les capacités des sélecteurs. Ils s’écrivent à la suite d’un sélecteur, concaténés
par :.
:link, :visited, :hover, :active, :focus, :first-child, :last-child, :nth-child(n),
:nth-last-of-child(n), :nth-of-type(n), :nth-last-of-type(n), :first-of-type,
:last-of-type, :only-child, :only-of-type, :checked, :enabled, :indeterminate, :not(expr),
::first-letter, ::first-line.
Exemples :
div:nth-child(1) : le premier enfant du <div>.
div:nth-child(even) : les enfants aux positions paires du <div>.
div:nth-child(odd) : les enfants aux positions impaires du <div>.
div:nth-child(3n) : tous les trois enfants du <div>, depuis 0.
div:nth-child(3n+1) : tous les trois enfants du <div>, depuis 1.
div:nth-child(3n+2) : tous les trois enfants du <div>, depuis 2.
div:nth-child(3n+3) : même chose que div:nth-child(3n)
XVII.4.
Règles @
Les « règles @ » servent à moduler le comportement des feuilles de style ou ajouter des informations
qui ne pourraient pas s’inclure dans les déclarations classiques.
@import (importer une autre feuille de style), @charset (définir l’encodage des caractères), @page
(définir des règles générales pour les média paginés), @font-face (importer un fichier de fonte
externe), @media (définir des requêtes de média).
Exemples :
@import " a u t r e s _ s t y l e s . c s s " ;
@import u r l ( " impression . c s s " ) p r i n t ;
@page
{
s i z e : 15cm 20cm ;
margin : 2cm ;
marks : c r o s s ;
}
Éric Hervet
- 95/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XVII.. CSS3
@font − f a c e
{
font − family : maPolice ;
s r c : u r l ( CestPasComique . o t f ) ;
font − weight : bold ;
}
p
{
font − family : maPolice ;
}
@media p r i n t
{
body
{
font − s i z e : 2em;
background : white ;
}
nav
{
d i s p l a y : none ;
}
}
XVII.5.
Media Queries
Les Media Queries ou « requêtes de média » sont des fonctionnalités utiles de CSS pour adapter le
design et la présentation générale d’une page web selon l’appareil de consultation.
La syntaxe d’une media query est une suite de conditions à satisfaire.
Dans un document HTML, il est possible de charger des styles spécifiques en fonction d’un média :
<link rel= " s t y l e s h e e t " type= " t e x t / c s s "
media= " screen and (max− device − width :480 px ) "
href= " mon_style . c s s " / >
Les valeurs possibles de média sont : braille, embossed, handheld, print, projection, screen,
speech, tty et tv.
Exemples :
@media screen and ( min− width :200 px ) and (max− width :640 px )
{
section
Éric Hervet
- 96/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XVII.. CSS3
{
d i s p l a y : block ;
c l e a r : both ;
margin : 0 ;
}
}
Exemple avec détection de l’orientation :
http://abaque.ca/~eric/h14/info4007/exemples/css/CSS3MediaQuery1.html
Pour les navigateurs qui ne supportent pas encore les fonctionnalités CSS3 d’orientation, il est possible d’utiliser JavaScript (notamment la propriété window.orientation) pour changer la taille des
images selon l’orientation de l’appareil :
http://abaque.ca/~eric/h14/info4007/exemples/css/CSS3OrientationJS1.html
http://www.alsacreations.com/article/lire/930-css3-media-queries.html
http://www.w3schools.com/css/css_mediatypes.asp
Éric Hervet
- 97/128 -
Hiver 2014
INFO4007
XVIII.
Technologie de l’inforoute
XVIII.. Animations CSS3
Animations CSS3
http://abaque.ca/~eric/h14/info4007/exemples/css/animations/
Éric Hervet
- 98/128 -
Hiver 2014
INFO4007
XIX.
Technologie de l’inforoute
XIX.. Frameworks CSS3
Frameworks CSS3
+ Compass/Sass
http://compass-style.org
http://sass-lang.com
+ Blueprint
http://www.blueprintcss.org
+ LESS
http://lesscss.org
+ ...
Éric Hervet
- 99/128 -
Hiver 2014
INFO4007
XX.
XX.1.
Technologie de l’inforoute
XX.. jQuery
jQuery
Présentation
http://jquery.org
jQuery est une couche d’abstraction Open Source de JavaScript qui facilite la création de pages
web.
Il y a quatre manières de faire référence à des fichiers JavaScript jQuery dans une page HTML :
+ Télécharger des fichiers jQuery et les référencer localement ;
+ Télécharger des fichiers jQuery et les référencer « génériquement » ;
+ Référencer des fichiers jQuery via le procotole HTTP ;
+ Utiliser un CDN (Content Distribution Network).
Les deux premières approches posent l’inconvénient de vérifier régulièrement s’il y a des mises à
jour de jQuery et de les télécharger le cas échéant. La troisième approche évite d’avoir à télécharger
jQuery mais requiert tout de même de modifier le numéro de version dans le code HTML lorsqu’on
change de version de jQuery.
XX.2.
Exemple « Hello World »
Exemple sans jQuery :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/QuerySelectors1.html
montre comment associer des handlers à des événements d’éléments HTML.
Exemple avec jQuery :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/HelloWorld1.html
montre la syntaxe compacte de jQuery.
var nomId = $ ( "p" ) . a t t r ( ’id’ ) ;
permet d’obtenir la valeur de l’attribut id d’un paragraphe <p>.
text() sans argument permet de récupérer le contenu textuel d’un élément, ou de lui assigner si on
donne en argument une chaîne de caractères.
S’il y a plusieurs <p> dans la page HTML, alors on utilise la syntaxe
var nomId = $ ( "p.eq(0)" ) . a t t r ( ’id’ ) ;
pour désigner le premier <p> de la page.
XX.3.
jQuery et Web Storage
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQLoginLS.html
Éric Hervet
- 100/128 -
Hiver 2014
INFO4007
XX.4.
Technologie de l’inforoute
XX.. jQuery
Modification du DOM
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQModifyElements1.html
Exemples de recherches d’éléments avec les qualifieurs :even et :odd :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQFindByEvenOrOdd1.html
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/TableAlternee.html
Exemple de recherches d’éléments par class ou id :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQFindByClassOrId1.html
Exemple d’utilisation du sélecteur nth-child() :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQFindByCSS3StyleExpressions1.
html
Exemple d’utilisation de remove() :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQRemovingElements1.html
Exemple de création d’éléments du DOM JavaScript :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQCreatingElements1.html
Les méthodes pour insérer des éléments du DOM sont : append(), insert(), prepend(),
appendTo(), appendAfter(), insertBefore(), insertAfter().
XX.5.
Navigation dans le DOM
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQNextPrevClosestParent1.html
.siblings() sélectionne tous les frères de l’élément courant, .children() tous les enfants de l’élément courant.
Exemple :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQSiblingsChildren1.html
Pour des raisons de performance, on peut stocker des éléments du DOM dans des variables et agir
directement sur les variables :
$ ( "button" ) . c l i c k ( function ( )
{
// Stocker tous les <ul> dans une variable
var u l L i s t = $ ( "ul" ) ;
// Ôter le premier <li>
u l L i s t . f i n d ( "li:first-element" ) . remove ( ) ;
// Changer le texte du dernier <li>
u l L i s t . f i n d ( "li:last-element" ) . t e x t ( "Dernier␣item" ) ;
}
Éric Hervet
- 101/128 -
Hiver 2014
INFO4007
XX.6.
Technologie de l’inforoute
XX.. jQuery
Gestion des clics
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQClickDivs1.html
XX.7. DOM Traversals
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQFindAndUpdate1.html
XX.8.
Chaînage de fonctions jQuery
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQChaining1.html
XX.9.
Géolocalisation
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQGeoLocation1.html
XX.10.
ACCÉLÉROMÈTRE !
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/JQAccelerometer1.html
Éric Hervet
- 102/128 -
Hiver 2014
INFO4007
XXI.
Technologie de l’inforoute
XXI.. Animation CSS3 & jQuery
Animation avec CSS3 & jQuery
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/animation/
JQCssDivElements1.html
JQRoundedCorners1.html
JQArchTripleShadowSkewEllipsesGrad3.html
JQFadeInOut.html
JQSlideUpDown.html
JQAnimate1.html
JQAnimate2.html
JQAnimate3.html
JQSlideShow1.html
JQButtonAnimation1.html
JQTransforms2D1.html
JQSketchFollowMouse1.html
JQSketchSolid1.html
JQBouncingBalls1.html
Éric Hervet
- 103/128 -
Hiver 2014
INFO4007
XXII.
Technologie de l’inforoute
XXII.. Contrôles jQuery
Contrôles utilisateurs jQuery
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/UIControls/
JQUIAccordion1.html
JQUIButtons1.html
JQUICheckBoxRadio1.html
JQUIComboBox1.html
JQUIDatePicker1.html
JQUIProgressBar1.html
JQUISlider1.html
JQUIAnimSlider1.html
JQUITabs.html
JQUIThemes1.html
JQUIEffects1.html
JQUITravel1.html
Éric Hervet
- 104/128 -
Hiver 2014
INFO4007
XXIII.
Technologie de l’inforoute
XXIII.. jQuery Mobile
jQuery Mobile
XXIII.1.
Présentation
jQuery Mobile est un ensemble de plug-ins et widgets jQuery pour faciliter le développement d’applications web mobiles et multi-plateformes.
jQuery Mobile est basée sur la librairie de base jQuery qu’il faut référencer dans le code HTML.
jQuery Mobile fournit des événements propres au « cycle de vie » d’une page web mobile :
pageInit(), pageCreate(), pageShow() et pageHide().
jQuery Mobile supporte aussi des événements personnalisés pour la gestion des mouvements tels
que swipe, tap, tap-and-hold et le changement d’orientation de l’appareil.
jQuery Mobile utilise aussi des thèmes propres aux applications mobiles pour donner l’impression
(le « look ») d’applications natives.
Enfin, contrairement à jQuery classique qui utilise la construction :
$ ( document ) . ready ( )
{
// ...
}
jQuery Mobile utilise plutôt :
$ ( s e l e c t e u r ) . l i v e ( ’pageInit’ , ( function ( event ) {
// ...
}));
Donc techniquement, jQuery classique envoie un événement lorsque la page web a été chargée
tandis que jQuery Mobile lance un événement lorsque la page a été initialisée.
XXIII.2.
Exemples de base
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMHelloWorld1.html
Le même exemple enrichi avec des balises additionnelles et des classes CSS :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMHelloWorld1Enhanced.
html
XXIII.3.
Transitions entre pages
Exemple qui montre la séquence des événements déclenchés au cours du chargement d’une page
web mobile :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMPageEvents1.html
+ D’abord pagebeforecreate ;
+ Puis pagecreate lorsque le DOM est chargé ;
Éric Hervet
- 105/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXIII.. jQuery Mobile
+ Puis pageinit après que l’initialisation est complétée ;
+ Puis pagebeforeshow sur la page cible juste avant la transition ;
+ Puis pageshow sur la page cible juste après la transition ;
Lorsque l’utilisateur « tap » un lien de navigation vers une page qui est chargée pour la première
fois, la séquence d’événements suivante se produit :
+ pagebeforehide sur la page source juste avant la transition ;
+ pagebeforeshow sur la page cible avant la transition ;
+ pagehide sur la page source après la transition ;
+ pageshow sur la page cible après la transition ;
Lors de la transition d’une page à une autre, ui.nextPage est assignée à la page cible (ou objet
jQuery vide s’il n’y a pas de page suivante), et ui.prevPage est assigné à la page précédente (ou
objet jQuery vide s’il n’y a pas de page précédente).
jQuery Mobile utilise des méthodes asynchrones Ajax en interne, d’où la distinction entre événements de chargement (page load), d’affichage (page show) et de dissimulation (page hide).
jQuery Mobile applique aussi un post-traitement sur les pages HTML à vocation mobile.
L’événement mobileinit est déclenché sur l’objet document juste après son exécution. Il est possible
de le traiter, par exemple pour empêcher jQuery Mobile d’appliquer des styles « web mobile » à
certains éléments HTML :
$ ( document ) . bind ( ’mobileinit’ , function ( ) {
$ . mobile . page . prototype . o p t i o n s . keepNative = "input,␣textarea" ;
});
XXIII.4.
Page unique « multivue »
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMMultiPageViews1.html
XXIII.5.
Positionnement des entêtes et pieds de page
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMFixed1.html
Par défaut, les barres en haut et en bas sont en mode standard et « défilent » avec le reste de la page
lorsque l’utilisateur fait défiler la page (scroll), donc peuvent disparaître et réapparaître de la zone
d’affichage (viewport).
En mode fixed, les barres apparaissent en permanence en haut et en bas de la zone d’affichage
même lorsque l’utilisateur fait défiler le corps de la page.
Enfin en mode fullscreen, les barres apparaissent en permanence à l’intérieur de la zone d’affichage, indépendamment du défilement du contenu de la page.
Éric Hervet
- 106/128 -
Hiver 2014
INFO4007
XXIII.6.
Technologie de l’inforoute
XXIII.. jQuery Mobile
Les différents types de boutons
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMButtons1.html
Essentiellement les styles pour les boutons se résument à :
+ Un lien (anchor) avec l’attribut data-role="button" ;
+ Un élément <input> avec le type button, submit, reset ou image auquels on attribue la classe
ui-btn-hidden ;
+ L’attribut data-icon permet de créer un bouton avec un icône ;
+ L’attribut data-iconpos permet de gérer la position d’un icône ;
+ L’attribut data-inline="true" affiche un bouton de la même largeur que le texte qu’il contient ;
+ L’attribut data-role="controlgroup" (data-type="horizontal") regroupe les boutons verticalement (horizontalement) dans un élément <div> ;
+ L’attribut data-theme="e" permet d’utiliser le cinquième thème de jQuery (de "a" à "e").
XXIII.7.
Formulaires web mobiles
Exemple illustrant l’apparence des éléments de formulaires web mobiles :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMForm1.html
On trouve généralement des éléments de formulaire tels que : boutons à cocher (checkboxes), listes
déroulantes (drop-down lists), boutons radio, « curseurs » (sliders), champs de saisie ou recherche,
zones de texte et boutons de soumission (submit).
XXIII.8.
List Views
List View simple avec boutons :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMSimpleListView1.html
Lists Views imbriquées :
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMNestedListViews1.
html
XXIII.9.
Barres de navigation
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMNavigationBar1.html
XXIII.10.
Menus de sélection
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMMenu1.html
XXIII.11.
Géolocalisation
http://abaque.ca/~eric/h14/info4007/exemples/jQuery/mobile/JQMGeoLocation1.html
Éric Hervet
- 107/128 -
Hiver 2014
INFO4007
XXIV.
Technologie de l’inforoute
XXIV.. Design responsif
Design responsif
Objectif : bâtir des sites web qui se visualisent sur (à peu près) tous les appareils possibles (smart
tvs, moniteurs de tailles et résolutions variées, tablettes, téléphones intelligents, etc.).
Tout d’abord, la première règle pour créer des sites web flexibles en fonction de la taille d’écran est
de travailler avec les pourcentages et les rems (root em unit), plutôt qu’avec les pixels et les tailles
de polices.
L’unité de taille de police rem est relative à l’élément racine <html> et non à la taille de l’élément
parent comme em.
Il est donc possible de définir une seule taille de police de l’élément <html> pour tout le document
est les éléments internes en fonction de cette taille globale.
html { font − s i z e : 62.5%; }
body { font − s i z e : 1 . 4rem ; }
h1 { font − s i z e : 2 . 4rem ; }
Pour les navigateurs qui ne supportent pas encore l’unité rem, il est recommandé de spécifier aussi
dans une autre unité.
html { font − s i z e : 62.5%; }
body { font − s i z e : 14px ; font − s i z e : 1 . 4rem ; }
h1 { font − s i z e : 24px ; font − s i z e : 2 . 4rem ; }
XXIV.1.
Media Queries
Rappel : l’élément HTML <link> possède l’attribut media où il est possible d’indiquer quel fichier
CSS utiliser selon la taille d’écran, par exemple :
<link media= " only screen and (max− device − width : 480px ) "
href= " mobile . c s s " rel= " s t y l e s h e e t " / >
Les propriétés les plus communes pour les media queries sont :
+ width (minimum : min-width, maximum : max-width) :
largeur du viewport 48 .
+ height (minimum : min-height, maximum : max-height) :
hauteur du viewport.
+ device-width (minimum : min-device-width, maximum : max-device-width) :
largeur de l’écran.
+ device-height (minimum : min-device-height, maximum : max-device-height) :
hauteur de l’écran.
+ orientation : portrait (h > w) ou landscape (w > h).
48. Viewport : surface de la fenêtre du navigateur.
Éric Hervet
- 108/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXIV.. Design responsif
+ aspect-ratio (minimum : min-aspect-ratio, maximum : max-aspect-ratio) :
rapport width / height.
+ device-aspect-ratio
(minimum
:
max-device-aspect-ratio) :
rapport device-width / device-height.
min-device-aspect-ratio,
maximum
:
http://www.alsacreations.com/article/lire/1490-comprendre-le-viewport-dans-le-web-mobile.html
@media screen and ( min− width : 440px )
{
# content { background −image : u r l ( / images / small / bg . jpg ) ;
}
#
@media screen and ( min− width : 1000px )
{
# content { background −image : u r l ( / images / l a r g e / bg . jpg ) ;
}
@media screen and ( transform −3d )
{
. transforms { }
}
Le « CSSOM » 49 fournit une extension de l’objet window, window.matchMedia(), qui retourne un
objet de type MediaQueryList représentant le résultat d’une requête de média « matchant » une
propriété :
var mql = window . matchMedia ( mediaquery ) ;
i f ( mql . matches )
{
// ...
}
Exemple :
var mqobj = window . mathMedia ( ’(orientation:␣portrait)’ ) ;
i f ( mqobj . matches )
{
document . q u e r y S e l e c t o r ( ’body’ ) . c l a s s L i s t . add ( ’portrait’ ) ;
}
49. CSS Object Model.
Éric Hervet
- 109/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXIV.. Design responsif
i f ( window . matchMedia ( "(max-width:␣500px)" ) . matches )
// Le viewport a moins de 500 pixels de large
{
// ...
}
else // Le viewport a plus de 500 pixels de large
{
// ...
}
On peut aussi détecter les événements de changement de média et les traiter :
var mqobj = window . matchMedia ( ’(orientation:␣portrait)’ ) ;
mqobj . addEventListener ( ’orientationchange’ , bodyOrientationClass ) ;
function bodyOrientationClass ( )
{
i f ( mqobj . matches ) // Orientation : portrait
{
document . q u e r y S e l e c t o r ( ’body’ ) . c l a s s L i s t . remove ( ’landscape’ ) ;
document . q u e r y S e l e c t o r ( ’body’ ) . c l a s s L i s t . add ( ’portrait’ ) ;
}
else // Orientation : paysage
{
document . q u e r y S e l e c t o r ( ’body’ ) . c l a s s L i s t . remove ( ’portrait’ ) ;
document . q u e r y S e l e c t o r ( ’body’ ) . c l a s s L i s t . add ( ’landscape’ ) ;
}
}
XXIV.2.
Multi-colonnes
La propriété CSS columns permet de créer un modèle de contenu sur plusieurs colonnes. C’est en
fait un raccourci pour les propriétés column-count (nombre maximal de colonnes) et column-width
(largeur de colonne minimale). column-count est prioritaire, le navigateur ajustant la largeur des
colonnes autour de column-width autant que faire se peut. On peut aussi définir l’espace entre les
colonnes avec column-gap, et définir une ligne de division entre colonnes avec column-rule.
L’utilisation de multiples colonnes dépend fortement de la taille d’affichage disponible. Par exemple,
la déclaration
columns : 240px 6 ;
Éric Hervet
- 110/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXIV.. Design responsif
qui signifie « diviser le contenu en un maximum de 6 colonnes et s’assurer qu’aucune colonne
n’est plus petite que 240 pixels de large », provoquera l’affichage du contenu probablement sur 6
colonnes avec un écran de 24 pouces, mais seulement 1 colonne sur un écran de téléphone de largeur
maximale 480px ou moins.
column-rule est un raccourci pour les trois propriétés column-rule-width, column-rule-style et
column-rule-color. Exemple :
p
{
margin : 0 0 1em;
}
div
{
padding : 1em;
margin : 1em;
border : 2px s o l i d # c c c ;
columns : 240px 6 ;
column −gap : 2em;
column − r u l e : 2px dashed # c c c ;
}
http://www.w3schools.com/css/css3_multiple_columns.asp
XXIV.3.
Images bordures
border-image est une propriété CSS qui résume les propriétés border-image-source,
border-image-slice, border-image-width, border-image-outset et border-image-repeat.
http://www.w3schools.com/cssref/css3_pr_border-image.asp
XXIV.4.
Flexbox Layout
http://www.alsacreations.com/tuto/lire/1493-css3-flexbox-layout-module.html
https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes
http://coding.smashingmagazine.com/2013/05/22/centering-elements-with-flexbox
http://umaar.github.io/css-flexbox-demo
XXIV.5.
Type de connexion
JavaScript permet de connaître le type de connexion d’un appareil (mobile) connecté. Cela peut
servir à optimiser le téléchargement de données, généralement des images de différentes résolutions.
Éric Hervet
- 111/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXIV.. Design responsif
Les valeurs retournées sont parmi la liste : UNKNOWN, ETHERNET, WIFI, CELL_2G, CELL_3G ou CELL_4G.
var connection , speed ;
connection = navigator . connection ||
navigator . mozConnection ||
navigator . webkitConnection ||
{ ’type’ : ’0’ } ;
// Set download speed
switch ( connection . type )
{
case connection . CELL_3G : // 3G
speed = ’medium’ ;
break ;
case connection . CELL_2G : // 2G
speed = ’slow’ ;
break ;
default :
speed = ’fast’ ;
}
document . body . c l a s s L i s t . add ( speed ) ;
Éric Hervet
- 112/128 -
Hiver 2014
INFO4007
XXV.
XXV.1.
Technologie de l’inforoute
XXV.. BlackBerry 10
Programmation BlackBerry 10
Historique
BlackBerry Limited, connue sous le nom Research In Motion jusqu’en 2013, est une compagnie
canadienne de télécommunications et d’équipements sans fil, dont le siège social se situe à Waterloo
en Ontario. Elle a été fondée en 1984 par Mike Lazaridis et Douglas Fregin, respectivement
étudiants en ingénierie à l’Université de Waterloo et à l’Université de Windsor.
À ses débuts, elle a collaboré avec RAM Mobile Data et Ericsson pour concevoir un système de
télécommunication sans fil bidirectionnelle pour radiomessagerie (pagers) et courriel. En 1998, elle
met sur le marché le Inter@ctive Pager 950 pour faire compétition à Motorola, puis en 1999 le
BlackBerry 850 Pager, capable de recevoir des courriels grâce à BlackBerry Enterprise Server
(BES). En avril 2000, sort le BlackBerry 957, le premier téléphone intelligent de la compagnie,
équipé du système d’exploitation BlackBerry OS, offrant de nombreuses fonctionnalités à l’avantgarde pour l’époque.
En 2001, apparaît le BlackBerry Pearl 8100, le premier téléphone intelligent de BlackBerry
offrant des caractéristiques multimédia, notamment grâce à une caméra intégrée. L’apparition du
premier iPhone d’Apple en 2007 pousse BlackBerry à produire son premier téléphone intelligent
à écran tactile en 2008, le BlackBerry Storm. Grâce à son réseau de distribution plus large et
efficace qu’Apple à l’époque, les téléphones BlackBerry se vendent très bien, et en 2010 on estime à
environ 21 millions le nombre d’utilisateurs BlackBerry aux États-Unis seulement.
Depuis, l’« agressivité » commerciale de Google et d’Apple a fait décliner le nombre d’utilisateurs
BlackBerry aux États-Unis à 9 millions, mais dans le monde BlackBerry compte encore 79 millions
d’utilisateurs (statistiques de décembre 2012).
Cependant les investisseurs et les média ont commencé à douter de la capacité de BlackBerry à
compétitionner avec les systèmes d’exploitation Android (Google) et iOS (Apple), de plus en plus
conviviaux avec un tas de fonctionnalités.
En octobre 2011, BlackBerry dévoile un nouveau système d’exploitation d’abord nommé BBX puis
BlackBerry 10. Mais à cause de restructurations administratives et de nombreux délais, la sortie
officielle de BlackBerry 10 OS et de deux nouveaux téléphones intelligents qui en sont équipés, le
Z10 et le Q10, est reportée à janvier 2013, en même temps que l’annonce du changement de nom de
la compagnie de RIM à BlackBerry Ltd.
XXV.2.
Le système BB10
BlackBerry 10 OS est un système d’exploitation propriétaire de BlackBerry Ltd. BB10 est fondé
sur le système QNX, basé sur un noyau Unix et souvent utilisé dans les ordinateurs industriels,
notamment ceux embarqués dans des voitures.
Éric Hervet
- 113/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
BB10 a su offrir des fonctionnalités innovantes par rapport à ses concurrents, notamment : la gestion des mouvements (gestures) ; le fonctionnement multitâche (multitasking) ; le BlackBerry Hub,
véritable centre de notifications incluant tous les réseaux sociaux et comptes courriels dans une
seule application ; le BlackBerry Balance, qui permet aux utilisateurs de séparer données
personnelles et professionnelles dans des espaces mémoires distincts ; la caméra « à décalage
de temps » (time shift camera), qui prend plusieurs images à chaque prise de photo, permettant à l’utilisateur d’ajuster la photo à sa convenance (pour éviter les yeux fermés par exemple) ;
BBM (BlackBerry’s Messaging) qui permet la vidéoconférence et les appels VoIP (Voice over IP) ; etc.
BB10 a aussi intégré une machine virtuelle permettant d’exécuter des applications Android.
Les langages de programmation permettant de développer des applications pour BB10 sont :
+ Le SDK natif en C/C++ ;
+ Le SDK Cascades en C++/Qt ;
+ HTML5/CSS3/JavaScript (SDK WebWorks) ;
+ Android runtime (Java).
http://fr.blackberry.com/software/smartphones/blackberry-10-os.html
XXV.3.
Z10
http://ca.blackberry.com/smartphones/blackberry-z10/specifications.html
+ Écran 1280 × 768 pixels (diagonale 4.2 pouces, aspect ratio 15 ∶ 9) ; Densité 356 pixels par pouce ;
Couleurs 24 bits.
+ Mémoire RAM 2 Go.
+ Processeur Qualcomm Snapdragon S4, CPU double-coeur 1.5 GHz ;
Jeu d’instructions ARMv7.
http://www.qualcomm.com/snapdragon/processors/s4/specs
http://fr.wikipedia.org/wiki/Architecture_ARM :
« Le monde des ordinateurs portables pourrait connaître prochainement une évolution avec le
remplacement progressif des processeurs x86 par l’architecture ARM. Windows 8 est compatible
avec cette architecture (avec certaines limitations), tout comme Google Chrome OS. L’utilisation
de l’architecture ARM devrait permettre la réduction de la consommation électrique.
Par contre, les fondeurs des processeurs x86 (Intel et AMD) se préparent à cette concurrence en
réduisant la consommation électrique de leurs solutions et en simplifiant leurs architectures,
Éric Hervet
- 114/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
comme avec les Atom et Bobcat, par exemple en intégrant les capacités graphiques avec le
processeur. De l’autre côté, les fondeurs des SoC (System on Chip) à base d’architecture ARM,
comme NVidia et Qualcomm, continuent d’augmenter les performances de leurs puces, par
exemple en augmentant le nombre de cœurs ou en ajoutant de nouvelles instructions.
Il est également possible d’agglomérer différents cœurs de différentes puissances, les plus faibles
en consommation et puissance travaillant la majorité du temps, afin de minimiser la consommation électrique et des cœurs plus puissants activés uniquement en cas de forte demande de
calcul afin d’en accélérer le traitement. Cette technologie est appelée big.LITTLE, elle est utilisée
par Samsung, avec ses Exynos 5 octo (4 cortex-A7 faible consommation et 4 cortex-A15 de forte
puissance), MediaTek et d’autres. Le Tegra 3 de NVidia, utilise une technique similaire avec un
seul cœur de faible consommation et plusieurs de forte puissance. »
XXV.4.
IDE
L’IDE Momentics et le simulateur BB10 peuvent être téléchargés à :
http://developer.blackberry.com/native/downloads
Instructions pour configurer l’IDE et bâtir le squelette d’une application BB10 :
http://developer.blackberry.com/native/documentation/cascades/getting_started/
setting_up.html
XXV.4.1. main.cpp
Dans le dossier src, on trouve le fichier main.cpp.
La classe Application permet (première instruction du main()) d’instancier un objet qui va gérer
les interactions entre l’utilisateur et l’application durant le temps d’exécution de celle-ci, ainsi que
son initialisation et sa terminaison.
Les fichiers inclus QLocale et QTranslator sont des classes Qt 50 servant à gérer les chaînes de
caractères dans différentes langues.
Le fichier inclus applicationui.hpp est le fichier d’entête d’une classe automatiquement créée
pour le projet. C’est dans cette classe que l’on implémente la logique et l’interface graphique (User
Interface) de l’application.
Le fichier Qt/qdeclarativedebug.h inclut une classe utilisée pour débogger et profiler l’application.
La ligne suivante importe l’espace de noms bb::cascades.
50. http://fr.wikipedia.org/wiki/Qt
Éric Hervet
- 115/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
Le programme principal commence par créer un objet app puis une instance de la classe
ApplicationUI, qui permettra d’importer un fichier QML 51 contenant l’interface graphique de
l’application.
Enfin, le main() déclenche la boucle « d’écoute d’événements » de l’application. Lorsque cette boucle
d’écoute se termine (par exemple si l’utilisateur quitte l’application), l’objet Application efface la
scène et toute son arborescence, puis libère toutes les ressources de l’application.
XXV.4.2.
Chargement d’un fichier QML
Dans le dossier src, on trouve aussi les fichiers applicationui.hpp et applicationui.cpp.
Le constructeur ApplicationUI commence par définir la gestion des langues (localization), notamment en créant un objet QTranslator pour gérer les chaînes de caractères multilangues et un objet
LocaleHandler pour détecter les éventuels changements de langue (locale) de l’appareil sur lequel
tourne l’application.
Puis on établit une connexion entre le signal systemLanguageChanged() et un slot défini dans
main.cpp.
Ensuite, on assigne le parent de l’application pour s’assurer que lorsque l’application se termine,
l’objet ApplicationUI est supprimé.
Puis un document QmlDocument est créé en utilisant le fichier assets situé dans le dossier
assets du projet. Ce document QML se voit assigner comme parent l’application courante. L’objet
QmlDocument représente un fichier QML chargé dans l’application.
Enfin, un objet root est créé à partir de l’objet QmlDocument. Cet objet doit être une sous-classe de
la classe AbstractPane utilisée pour mettre en place la scène de l’application.
Cela termine presque le constructeur de l’application. Il reste seulement à définir le slot connecté
au signal systemLanguageChanged(). Ce slot supprime tout traducteur existant qui serait préalablement relié à l’application, trouve le pays courant et la langue de l’appareil sur lequel tourne
l’application et installe un traducteur (translator) pour la langue courante.
Le fichier applicationui.hpp contient toutes les déclarations nécessaires pour utiliser ces classes,
ainsi que deux déclarations globales privées pour les objets QTranslator et LocaleHandler. Il est
généralement inutile voire déconseillé de modifier ce fichier.
XXV.4.3.
Créer une « UI » avec QML
Cascades propose un système flexible permettant de positionner les éléments d’interface de deux
manières :
+ en indiquant le type de mise en page (layout) pour le conteneur parent.
51. Qt Modeling Language. http://en.wikipedia.org/wiki/QML
Éric Hervet
- 116/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
Par exemple, une mise en page StackLayout indique que les enfants d’un conteneur sont positionnés les uns à côté des autres, horizontalement ou verticalement ;
+ en spécifiant des propriétés de mise en page aux enfants du conteneur, afin de contrôler le
positionnement des enfants entre eux (propriétés telles que SpaceQuota, coordonnes x et y,
etc.).
Les différents types de mise en page sont :
+ StackLayout
Mise en page par défaut dans Cascades (Fig. 4).
Les éléments s’empilent horizontalement ou verticalement, dans une direction spécifiée
(gauche-droite ou haut-bas). Les marges (espaces vides) entre les éléments peuvent être modifiées aussi.
F IGURE 4 – Mise en page StackLayout.
+ DockLayout
La mise en page DockLayout (Fig. 5) permet d’aligner les composants enfants d’un conteneur
en les alignant sur le bord gauche, droit, haut ou bas, ou en spécifiant que le composant doit
remplir toute la largeur et/ou toute la hauteur du conteneur.
F IGURE 5 – Mise en page DockLayout.
+ AbsoluteLayout
La mise en page AbsoluteLayout (Fig. 6) permet de positionner les composants de manière
exacte sur l’écran, en indiquant notamment leurs coordonnées x et y par rapport à leur conteneur parent.
Éric Hervet
- 117/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
F IGURE 6 – Mise en page AbsoluteLayout.
Exemple de code source QML avec une mise en page StackLayout :
import bb . cascades 1 . 2
Page {
Container {
layout : StackLayout { }
Button {
t e x t : " Bouton1 "
l a y o u t P r o p e r t i e s : StackLayoutProperties { }
horizontalAlignment : HorizontalAlignment . Center
}
Button {
t e x t : " Bouton2 "
l a y o u t P r o p e r t i e s : StackLayoutProperties { }
horizontalAlignment : HorizontalAlignment . Center
}
Button {
t e x t : " Bouton3 "
l a y o u t P r o p e r t i e s : StackLayoutProperties { }
horizontalAlignment : HorizontalAlignment . Center
}
}
}
Si on veut faire la même chose en C++ :
Container * pContainer = new Container ( ) ;
StackLayout * pStackLayout = new StackLayout ( ) ;
pStackLayout −>s e t O r i e n t a t i o n ( LayoutOrientation : : TopToBottom ) ;
Éric Hervet
- 118/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
pContainer −>setLayout ( pStackLayout ) ;
Button * pButton1 = Button : : c r e a t e ( ) . t e x t ( " Bouton1 " ) ;
Button * pButton2 = Button : : c r e a t e ( ) . t e x t ( " Bouton2 " ) ;
Button * pButton3 = Button : : c r e a t e ( ) . t e x t ( " Bouton3 " ) ;
pButton1 −>setLayoutProperties ( StackLayoutProperties : : c r e a t e ( )
. h o r i z o n t a l ( HorizontalAlignment : : Center ) ) ;
pButton2 −>setLayoutProperties ( StackLayoutProperties : : c r e a t e ( )
. h o r i z o n t a l ( HorizontalAlignment : : Center ) ) ;
pButton3 −>setLayoutProperties ( StackLayoutProperties : : c r e a t e ( )
. h o r i z o n t a l ( HorizontalAlignment : : Center ) ) ;
pContainer −>add ( pButton1 ) ;
pContainer −>add ( pButton2 ) ;
pContainer −>add ( pButton3 ) ;
Exemple de code source QML avec une mise en page AbsoluteLayout :
import bb . cascades 1 . 2
Page {
Container {
layout : AbsoluteLayout { }
Label {
l a y o u t P r o p e r t i e s : AbsoluteLayoutProperties {
p o s i t i o n X : 200
p o s i t i o n Y : 300
}
t e x t : " Label 1 "
}
Label {
l a y o u t P r o p e r t i e s : AbsoluteLayoutProperties {
p o s i t i o n X : 400
p o s i t i o n Y : 700
}
t e x t : " Label 2 "
}
}
Éric Hervet
- 119/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
}
Si on veut faire la même chose en C++ :
// Create the c o n t a i n e r and l a y o u t
Container * myContainer = new Container ;
AbsoluteLayout * layout = new AbsoluteLayout ;
myContainer −>setLayout ( layout ) ;
// Create the l a y o u t p r o p e r t i e s
AbsoluteLayoutProperties * alp1 = AbsoluteLayoutProperties : : c r e a t e ( )
. x(200)
. y(300);
AbsoluteLayoutProperties * alp2 = AbsoluteLayoutProperties : : c r e a t e ( )
. x(400)
. y(700);
// Add the l a b e l s and s e t the l a y o u t p r o p e r t i e s f o r each
myContainer −>add ( Label : : c r e a t e ( )
. t e x t ( " Label 1 " )
. l a y o u t P r o p e r t i e s ( alp1 ) ) ;
myContainer −>add ( Label : : c r e a t e ( )
. t e x t ( " Label 2 " )
. l a y o u t P r o p e r t i e s ( alp2 ) ) ;
Utilisation des « quotas d’espace »
La propriété spaceQuota ne s’applique que pour une mise en page StackLayout et permet d’indiquer
comment un composant enfant peut diminuer ou augmenter pour remplir l’espace disponible d’une
mise en page spécifique.
Une valeur négative de spaceQuota indique que le composant utilise tout l’espace dont il a besoin
pour apparaître correctement, mais sans plus que nécessaire. C’est le comportement par défaut
lorsqu’on ne spécifie aucune valeur de spaceQuota.
Une valeur positive de spaceQuota indique que le composant utilise tout l’espace qu’il peut tout
en respectant les autres composants dans le même conteneur, et qu’il diminue ou augmente selon
l’espace disponible. Par exemple une valeur de 2 force un composant à prendre deux fois plus d’espace
qu’un composant avec un spaceQuota égal à 1.
Finalement les spaceQuota positifs peuvent être vus comme une manière de fixer les ratios de
tailles entre composants.
Exemple de code source QML avec utilisation des spaceQuota :
Éric Hervet
- 120/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
import bb . cascades 1 . 2
Page {
Container {
layout : StackLayout {
o r i e n t a t i o n : LayoutOrientation . LeftToRight
}
Button {
l a y o u t P r o p e r t i e s : StackLayoutProperties {
spaceQuota : 1
}
}
Button {
l a y o u t P r o p e r t i e s : StackLayoutProperties {
spaceQuota : 2
}
}
Button {
l a y o u t P r o p e r t i e s : StackLayoutProperties {
spaceQuota : 3
}
}
}
}
Si on veut faire la même chose en C++ :
// Create the c o n t a i n e r and l a y o u t
Container * myContainer = new Container ;
StackLayout * layout = StackLayout : : c r e a t e ( )
. o r i e n t a t i o n ( LayoutOrientation : : LeftToRight ) ;
myContainer −>setLayout ( layout ) ;
// Create t h r e e s e t s o f s t a c k l a y o u t p r o p e r t i e s
StackLayoutProperties * slp1 = StackLayoutProperties : : c r e a t e ( )
. spaceQuota ( 1 ) ;
StackLayoutProperties * slp2 = StackLayoutProperties : : c r e a t e ( )
. spaceQuota ( 2 ) ;
StackLayoutProperties * slp3 = StackLayoutProperties : : c r e a t e ( )
Éric Hervet
- 121/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
. spaceQuota ( 3 ) ;
// Add buttons t h a t use the s t a c k
myContainer −>add ( Button : : c r e a t e ( ) .
myContainer −>add ( Button : : c r e a t e ( ) .
myContainer −>add ( Button : : c r e a t e ( ) .
layout properties
l a y o u t P r o p e r t i e s ( slp1 ) ) ;
l a y o u t P r o p e r t i e s ( slp2 ) ) ;
l a y o u t P r o p e r t i e s ( slp3 ) ) ;
Exemple complet illustrant les différents types de mise en page :
http://abaque.ca/~eric/h14/info4007/exemples/qml/LayoutsTutorial
Le fichier assets/main.qml définit trois conteneurs dans le conteneur principal de la page : un
conteneur (par défaut en StackLayout) pour le haut de la page, un conteneur (en mode StackLayout
de gauche à droite) pour le bas de la page avec trois boutons, et un conteneur contenant lui-même
trois conteneurs ! . . . respectivement en modes StackLayout, DockLayout et AbsoluteLayout.
Les boutons du conteneur de bas de page possèdent chacun l’événement onClicked: pour cacher ou
rendre visible à tour de rôle les conteneurs Stack, Dock et Absolute.
Autre exemple complet qui manipule des images :
http://abaque.ca/~eric/h14/info4007/exemples/qml/PremiereApp
Comme toujours, il est possible de faire la même chose en C++ seulement :
http://developer.blackberry.com/native/documentation/cascades/getting_started/
first_app/lightning_crossfade_cpp.html
XXV.4.4.
Images
Exemple complet :
http://abaque.ca/~eric/h14/info4007/exemples/qml/imageloader
Explications :
http://abaque.ca/~eric/h14/info4007/exemples/qml/imageloader/readme.txt
Le fichier src/app.cpp charge dix images dans le modèle de l’application puis met en place la scène
grâce au fichier assets/main.qml (ImageView, Button, ListView).
Le fichier src/imageloader.cpp permet d’initialiser une requête asynchrone sur le réseau et de
créer un thread pour chaque objet QImage correspondant à une image à charger.
Le fichier src/imageprocessing.cpp permet simplement de redimensionner chaque image aux
mêmes dimensions.
http://developer.blackberry.com/native/reference/cascades/bb__cascades__imageview.
html?f=imageview
Éric Hervet
- 122/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
http://developer.blackberry.com/native/reference/cascades/bb__cascades_
_imageviewloadeffect.html?f=imageview
http://developer.blackberry.com/native/reference/cascades/bb__imagedata.html?f=
imagedata
XXV.4.5.
Composants de dialogue
http://abaque.ca/~eric/h14/info4007/exemples/qml/DialogSample
Alert, Prompt, Login, File Browse, Context Menu.
http://developer.blackberry.com/native/reference/cascades/bb__cascades__dialog.
html?f=dialog
XXV.4.6.
Capteurs
http://abaque.ca/~eric/h14/info4007/exemples/qml/SensorDemo
Collision Detector, Compass, Flashlight, Metal Finder, Motion Alarm, Rotation 3D.
http://developer.blackberry.com/native/reference/cascades/qtsensors.html?f=
qtsensors
XXV.4.7.
Jeu basé sur l’accéléromètre
http://abaque.ca/~eric/h14/info4007/exemples/qml/accelgame
Le « joueur » (tuile de dimension 50 définie dans src/player.cpp) se déplace dans une des quatre
directions lorsque le capteur détecte une variation en x ou en y supérieure à 0.8 en valeur absolue
(voir fonction evaluateInput() du fichier src/gamecontroller.cpp).
http://developer.blackberry.com/native/reference/cascades/qaccelerometer.html
http://developer.blackberry.com/native/reference/cascades/qaccelerometerreading.
html
XXV.4.8.
État de la batterie
http://abaque.ca/~eric/h14/info4007/exemples/qml/batterysample
Un exemple simple qui teste l’état de la batterie (propriété _battery.chargingState) et son niveau
(_battery.level) et qui affiche des messages et des images différentes en conséquence.
http://developer.blackberry.com/native/reference/cascades/bb__device_
_batterychargingstate.html?f=battery
Éric Hervet
- 123/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
http://developer.blackberry.com/native/reference/cascades/bb__device_
_batterycondition.html?f=battery
http://developer.blackberry.com/native/reference/cascades/bb__device__batteryinfo.
html?f=battery
XXV.4.9.
Lecteur de code barre
http://abaque.ca/~eric/h14/info4007/exemples/qml/barcodereader
Un exemple simple de lecture de code barre (barcode reader) en utilisant la caméra.
http://developer.blackberry.com/native/reference/cascades/multimedia_camera.html?
f=camera
XXV.4.10.
Gestion d’une base de données SQLite
http://abaque.ca/~eric/h14/info4007/exemples/qml/databasecreation
Un exemple qui démontre comment créer une base de données SQLite, une table, des tuples, ainsi
que supprimer une table.
Techniquement, cela est rendu possible grâce aux librairie BlackBerry SqlConnection et QtSql qui
contiennent les méthodes usuelles permettant de gérer une base de données relationnelle.
http://developer.blackberry.com/native/reference/cascades/qtsql.html?f=qtsql
XXV.4.11.
Requête SQL en QML
http://abaque.ca/~eric/h14/info4007/exemples/qml/databamanagerusage
Dans le même ordre d’idée, une ListView peuplée par le résultat d’une requête SQL. Dans cet
exemple tout est fait en QML.
XXV.4.12.
Citations
http://abaque.ca/~eric/h14/info4007/exemples/qml/quotes
Toujours avec une base de données SQLite, une application plus complexe qui affiche une liste de
citations de personnes connues, donne la possibilité d’en ajouter d’autres ou d’en effacer.
Ici on utilise une classe QML GroupDataModel pour trier et regrouper les données selon certains
critères (ici le nom de famille et le prénom, voir fichier assets/QuotesListPage/QuotesModel.qml).
http://developer.blackberry.com/native/reference/cascades/bb__cascades_
_groupdatamodel.html?f=groupdatamodel
Éric Hervet
- 124/128 -
Hiver 2014
INFO4007
XXV.4.13.
Technologie de l’inforoute
XXV.. BlackBerry 10
FilePicker
http://abaque.ca/~eric/h14/info4007/exemples/qml/filepicker
Un exemple qui démontre les possibilités de la classe FilePicker pour permettre à l’utilisateur de
sélectionner des fichiers ou dossiers locaux, avec les options d’affichage possibles (liste de noms ou
grille d’icônes), les types de fichiers, la possibilité de multi-sélectionner et de trier en ordre croissant
ou décroissant.
Essentiellement cela peut être fait en QML.
http://developer.blackberry.com/native/reference/cascades/data_management_file_
picker.html?f=filepicker
XXV.4.14.
Calendrier
http://abaque.ca/~eric/h14/info4007/exemples/qml/calendar
Une application simple de calendrier, permettant de visualiser des événements, en créer de
nouveaux, en éditer et en supprimer.
http://developer.blackberry.com/native/reference/cascades/app_integration_
calendar.html?f=calendar
XXV.4.15.
Gestion des comptes
http://abaque.ca/~eric/h14/info4007/exemples/qml/accounts
main.qml propose une liste déroulante (dropdown list) des différents types de comptes BlackBerry :
Calendars, Contacts, Notebook, Geolocation, Linking, Memos, Messages, Tags, Tasks et Phone. Selon
le choix sélectionné, les items correspondants sont affichés au-dessous dans un composant ListView.
Pour ce faire, on fait instancie un objet accountViewer défini dans AccountViewer.qml. Ce dernier
utilise une ListView de paires titre / valeur (title / value), correspondant à une classe programmée
dans le fichier ViewerField.qml.
Les fichiers C++ dans src servent à donner l’accès aux informations d’un compte donné, à l’éditer
et à mettre à jour les informations affichées si le compte a été modifié.
http://developer.blackberry.com/native/reference/cascades/app_integration_
calendar.html?f=calendar
http://developer.blackberry.com/native/reference/cascades/app_integration_
contacts.html?f=contact
http://developer.blackberry.com/native/reference/cascades/app_integration_
notebook.html?f=notebook
http://developer.blackberry.com/native/reference/cascades/bb__platform__geo_
_geolocation.html?f=geolocation
Éric Hervet
- 125/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
http://developer.blackberry.com/native/reference/cascades/app_integration_message.
html?f=message
http://developer.blackberry.com/native/reference/cascades/device_and_
communication_phone.html?f=phone
XXV.4.16.
Dictaphone
http://abaque.ca/~eric/h14/info4007/exemples/qml/dictaphone
Application qui permet d’enregistrer de l’audio et de le jouer.
Elle met en jeu entre autre les classes QML AudioRecorder pour enregistrer de l’audio et
MediaPlayer pour jouer un fichier audio.
Par défaut l’enregistrement se fait au format AAC (extension .m4a, MPEG-4 audio), mais les appareils équipés de BB10 OS peuvent utiliser différents formats (images, audio, vidéo) :
https://developer.blackberry.com/devzone/develop/supported_media/bb10_media_
support.html
Les fichiers src/*.cpp servent ici à détecter les fichiers audio déjà enregistrés (dans
/data/tracks/) et à mettre à jour le compteur de fichiers audio selon qu’on en efface ou
qu’on en enregistre de nouveaux.
http://developer.blackberry.com/native/reference/cascades/bb__multimedia_
_audiorecorder.html?f=audiorecorder
http://developer.blackberry.com/native/reference/cascades/bb__multimedia_
_mediaplayer.html?f=mediaplayer
XXV.4.17.
Lecture/écriture au format JSON
http://abaque.ca/~eric/h14/info4007/exemples/qml/jsonreadwrite
Application qui montre comment lire ou écrire un fichier au format JSON, ainsi que convertir de
JSON à Qt ou l’inverse.
Les boutons QML font ici appel à des fonctions écrites en C++ dans src/app.cpp, notamment
loadOriginalJson(), convertJsonToQt() et convertQtToJson().
http://developer.blackberry.com/native/reference/cascades/bb__data_
_jsondataaccess.html?f=json
XXV.4.18.
Manipulation de la lumière LED
http://abaque.ca/~eric/h14/info4007/exemples/qml/led
Application qui permet de gérer la lumière LED d’un appareil BlackBerry équipé de BB10 OS, grâce
à la classe QML Led.
Éric Hervet
- 126/128 -
Hiver 2014
INFO4007
Technologie de l’inforoute
XXV.. BlackBerry 10
http://developer.blackberry.com/native/reference/cascades/bb__device__led.html?f=
led
XXV.4.19.
MapView
http://abaque.ca/~eric/h14/info4007/exemples/qml/mapview
Application qui montre comment utiliser MapView, le zoom et les pins.
http://developer.blackberry.com/native/reference/cascades/bb__cascades__maps_
_mapview.html?f=mapview
XXV.4.20.
Notifications
http://abaque.ca/~eric/h14/info4007/exemples/qml/notifications
Simple application qui montre comment gérer les notifications en QML.
http://developer.blackberry.com/native/reference/cascades/platform_notifications.
html
XXV.4.21.
Orientation
http://abaque.ca/~eric/h14/info4007/exemples/qml/orientation
Simple application qui montre comment détecter la position de l’appareil, en héritant de la classe
QOrientationFilter et en utilisant un objet privé de la classe QOrientationSensor.
http://developer.blackberry.com/native/reference/cascades/qorientationfilter.html?
f=qorientationfilter
http://developer.blackberry.com/native/reference/cascades/qorientationsensor.html?
f=qorientationsensor
XXV.4.22.
Stockage permanent
http://abaque.ca/~eric/h14/info4007/exemples/qml/starshipsettings
Application qui montre comment stocker de manière permanente sur l’appareil des valeurs (ici des
settings), grâce à la classe Qt QSettings et notamment la méthode void setValue( ).
http://developer.blackberry.com/native/reference/cascades/qsettings.html?f=
qsettings
Éric Hervet
- 127/128 -
Hiver 2014
INFO4007
XXV.4.23.
Technologie de l’inforoute
XXV.. BlackBerry 10
Sons système
http://abaque.ca/~eric/h14/info4007/exemples/qml/systemsound
Application qui montre comment jouer des sons système grâce à la classe QML SystemSound.
http://developer.blackberry.com/native/reference/cascades/bb__multimedia_
_systemsound.html?f=systemsound
Éric Hervet
- 128/128 -
Hiver 2014

Documents pareils