Web 2.0, Javascript, ajax et xul

Conférence de Stéphane Bonhomme

Guilde - 22/03/2006

Web 2.0

Définition

d'après l'article d'Eric Van Der Vlist publié sur xmlfr.org

Le web2.0 n'est pas un standard, mais une série de principes, comparable à REST

Définition sur wikipédia

"Web 2.0 est un terme souvent utilisé pour désigner ce qui est perçu comme une transition importante du World Wide Web, passant d'une collection de sites web à une plate-forme informatique à part entière, fournissant des applications web aux utilisateurs. Les défenseurs de ce point de vue soutiennent que les services du Web 2.0 remplaceront progressivement les applications de bureau traditionnelles."

Volet Technique

Web2.0 s'appuie sur un ensemble de technologies "mûres" :

L'utilisation de XML sur HTTP en mode asynchrone en Javascript s'est vu décerner le nom de « Ajax ».

Applications de bureau

Replacer Office par une application javascript ?

Règles des 80/20

Soulager l'utilisateur

Volet Social

Internet tirera son potentiel du réseau humain formé par ses utilisateurs

Le web n'est plus à sens unique, mais intègre de plus en plus les contributions des utilisateurs

"Le Web 2.0 c'est utiliser le web comme il a été conçu pour être utilisé. Les « tendances » que nous distinguons sont simplement la nature inhérente du web qui émerge des mauvaises pratiques qui lui ont été imposées pendant la bulle [Internet]"

Paul Graham

En résumé : principe de démocratie sur le Web

Modèle économique

Existe-t-il une bulle web 2.0 ?

Baisse des coûts de lancement des Start-up

Les montants des investissements n'ont pas progressé, mais le nombre d'investissements de projets a nettement augmenté

De nombreuses sociétés sont crées autour des technologie web 2.0 dans le seul but d'être revendues

Attention à tirer les enseignements de la bulle 1.0

Écueils du web 2.0

Respecter les priorités du web 1.0 :

Ergonomie (requêtes AJAX)

Propriété du contenu

Les utilisateurs doivent rester vigilants !!

Objets en javascript

Modèle objet de javascript

Aucune distinction entre les types d'objet.

L'héritage est réalisé par prototypage.

Propriétés et méthodes peuvent être ajoutées à un objet dynamiquement.

Création d'objets

Extensivement

steph={nom:"bonhomme",prenom:"stéphane"};

Avec un constructeur

function personne(nom, prenom) {
this.nom=nom;
this.prenom=prenom;
}
steph = new personne("bonhomme","stéphane");

Ajout de propriétés

à un objet

steph.fonction="consultant";

au prototype :

personne.prototype.fonction="employé";

Héritage

L'héritage se fait par affectation du prototype

function personne(nom, prenom) {
  this.nom=nom;
  this.prenom=prenom;
}
function employe(nom, prenom, poste){
  this.base=personne;
  this.base(nom,prenom);
  this.poste=poste;
}
employe.prototype=new personne;
steph = new employe("bonhomme","stéphane","développeur");

Méthodes

Les méthodes sont des fonctions liées :

Fonction anonyme

steph.annonce= function(msg) {
 alert('Steph a dit '+msg);
}

Fonction explicite

fonction annonce(msg) {
  alert(this.prenom+' a dit '+msg);
}
personne.prototype.annonce=annonce;

Document Object Model

DOM : Définitions

Spécification du w3c

Représentation de l'arbre XML des documents sous forme d'un hiérarchie d'objets

Prototypes

référence : http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html

DOM : Interface Node

Propriétés

Méthodes

DOM : Interface Document

Propriétés

Méthodes

DOM : Interface Element

Propriétés

Méthodes

DOM: Interface Attr

Propriétés

DOM : Interface CharacterData

Propriétés

Méthodes

Utilisation de DOM dans le navigateur

Interfaces DOM implémentées en JavaScript

Utilisation de DOM sur les documents HTML/xhtml = Dhtml

Permet d'accéder / modifier le document affiché dans le navigateur :

Exemple

Interactivité sur une page

Ajax

Ajax: Définition

Asynchronous Javascript And XML

L'objet XMLHttpRequest

Permet de faire des requêtes HTTP depuis javascript

Instanciation de l'objet connexion

Petit hack pour IE (XMLHttpRequest est un objet ActiveX :( )

Les navigateur implémentent un prototype XMLHttpRequest,

Instanciation d'un objet avec ce prototype

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  http_request = new XMLHttpRequest();
} 
else if (window.ActiveXObject) { // IE
  http_request = new ActiveXObject("Microsoft.XMLHTTP");
}

Création du handler de la réponse

A tout changement d'état de l'objet requête, la méthode onreadystatechange de l'objet connexion

http_request.onreadystatechange = function(){
  // Traitement à effectuer lors du changement d'état
};

Les états sont :

0 = uninitialized

1 = loading

2 = loaded

3 = interactive

4 = complete

Envoi de la requête

la méthode open permet d'ouvrir la connexion, et send envoie la requête

Avec la méthode HTTP GET

http_request.open('GET', 'http://www.example.org/xmldata', true);
http_request.send(null);

Avec la méthode HTTP POST

http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.open('POST', 'http://www.example.org/xmldata', true);
http_request.send(data);

Traitement de la réponse

Contenu de la méthode onreadystatechange

if (http_request.readyState == 4) {
  if (http_request.status == 200) {
     // on a une réponse du serveur sans erreur
     // ici on va pouvoir faire quelque chose avec les données chargées
  } else {
     // il y a eu une erreur,
     // 404 (Not Found) ou 500 (Internal Server Error)...
     // On peut peut être informer l'utilisateur qu'il y a eu un problème
  } 
} else {
  // le contenu n'est pas encore arrivé
  // c'est le bon endroit pour activer un indicateur de chargement
}

Insertion du contenu dans la page

Méthode brutale :

  if (http_request.status == 200) {
     // on a une réponse du serveur sans erreur
     document.getElementById('reponse').innerHTML=http_request.responseText;
   }

Utiliser l'objet DOM retourné :

  if (http_request.status == 200) {
     // on a une réponse du serveur sans erreur
     newcontent=document.importNode(http_request.responseXML.documentElement.cloneNode(true),true);
     document.getElementById('reponse').appendChild(newcontent);
  }
  

Exemple

Toujours les réponses ministérielles, avec chargement d'une réponse à la demande

XUL

Définition

XML User-interface Language (prononcez zool)

Une application XML pour la construction de widgets dans un navigateur

portail XUL Francophone

Exemple

Editeur SVG collaboratif, écrit en XUL