Catégorie: Javascript

08/03/2012

Permalink 16:30:06, Catégories: Web, Javascript, (X)HTML/CSS, Récapitulatif Web, Récapitulatif, 891 mots   French (FR) , bovino

[Web] Personnalisez le menu contextuel avec Firefox

HTML5 redéfinit certains aspects et certaines balises du HTML.
Parmi les éléments qui retrouvent une nouvelle jeunesse figure la balise menu.
Bien sûr, évoquer cette balise ne présente que peu d'intérêt puisqu'elle n'est, à l'heure actuelle (et sauf erreur de ma part) reconnue par aucun navigateur...

Par aucun navigateur ? Vraiment ?

En fait, pas tout à fait : parmi les différentes utilisations de la balise menu, une est utilisable par Firefox depuis la version 8 : la personnalisation du menu contextuel lié à un élément de la page (ou de la page elle-même).

La syntaxe de la balise menu est la suivante :

<menu type="..." id="...">

type correspond au comportement attendu pour le menu et id l'identifiant du menu.
Cette balise peut (dans le cadre du menu contextuel) contenir soit des sous-menus représentés par une nouvelle balise menu soit des éléments de menu représentés par des balises menuitem.

Bon, assez d'explications théoriques, passons à la pratique avec un exemple :

<menu type="context" id="developpez"> 
  <menuitem label="Aller sur developpez.com" onclick="location.href='http://www.developpez.com'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
  <menu label="Forums developpez.com"> 
    <menuitem label="(X)HTML" onclick="location.href='http://www.developpez.net/forums/f39/webmasters-developpement-web/html-dhtml-xhtml/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="CSS" onclick="location.href='http://www.developpez.net/forums/f463/webmasters-developpement-web/css/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="JavaScript" onclick="location.href='http://www.developpez.net/forums/f23/webmasters-developpement-web/javascript/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="AJAX" onclick="location.href='http://www.developpez.net/forums/f458/webmasters-developpement-web/ajax/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
  </menu> 
</menu>

Dans cet exemple (relativement simple), nous ajoutons des liens vers developpez.com et différents forums du site.
Vous pouvez constater que le type de menu est context pour préciser qu'il s'agit de personnaliser le menu contextuel.
D'autre part, le sous-menu et les éléments des menus possèdent des attributs label indiquant le texte à afficher correspondant à chaque option.
Les éléments de menus possèdent quant à eux des attributs icon (image apposée à côté de l'élément) et onclick (action JavaScript à lancer au clic sur cet élément).

Pour autant, vous aurez beau ajouter cette portion de code dans votre page et faire des clics droits partout dans la page (sur Firefox bien entendu) pour tester, rien ne se passera !
En fait, nous avons oublié l'essentiel : déterminer à quel élément de la page le menu contextuel est associé.
Pour préciser cela, il suffit d'ajouter un attribut contextmenu à l'élément souhaité. La valeur de cet attribut doit correspondre à l'identifiant (attribut id) du menu.
Dans l'exemple suivant, nous posons cet attribut sur la balise body afin que le menu contextuel s'applique sur toute la page :

<!doctype html> 
<html lang="fr"> 
<head> 
  <meta charset="utf-8" /> 
  <title>Menu contextuel</title> 
  <style> 
    html, body{ 
      height: 100% 
    } 
    h1{ 
      text-align: center; 
    } 
  </style> 
</head> 
<body contextmenu="developpez"> 
  <h1>Exemple de menu contextuel personnalisé</h1> 
  <div>Faites un clic droit dans la page pour voir les options ajoutées au menu contextuel.</div> 
<menu type="context" id="developpez"> 
  <menuitem label="Aller sur developpez.com" onclick="location.href='http://www.developpez.com'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
  <menu label="Forums developpez.com"> 
    <menuitem label="(X)HTML" onclick="location.href='http://www.developpez.net/forums/f39/webmasters-developpement-web/html-dhtml-xhtml/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="CSS" onclick="location.href='http://www.developpez.net/forums/f463/webmasters-developpement-web/css/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="JavaScript" onclick="location.href='http://www.developpez.net/forums/f23/webmasters-developpement-web/javascript/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
    <menuitem label="AJAX" onclick="location.href='http://www.developpez.net/forums/f458/webmasters-developpement-web/ajax/'" icon="http://www.developpez.com/template/favicon.ico"></menuitem> 
  </menu> 
</menu> 
</body> 
</html>

Notre exemple est maintenant fonctionnel. Vous pouvez voir un exemple en ligne.

Vous devez être identifié pour poster un commentaire.

31/01/2012

Permalink 21:58:20, Catégories: Web, Javascript, (X)HTML/CSS, Récapitulatif Web, Récapitulatif, 863 mots   French (FR) , bovino

[Web] Comprendre la balise script

S'il est bien une balise qui est souvent mal utilisée en HTML, c'est la balise <script>.
Nous allons essayer dans ce billet de faire le point sur cette balise en comprenant pourquoi.

  • La syntaxe

La syntaxe de base est relativement simple et ne pose pas de problème :
<script></script>
Il est toutefois important de noter que même si elle ne possède pas forcément de contenu, elle reste susceptible d'en avoir (le script en lui-même) ce qui fait que contrairement à une balise <link /> mais à l'instar d'une balise <style>, elle n'est pas autofermante et doit posséder une balise fermante.

  • Les attributs

L'attribut src ne pose habituellement pas de gros soucis.
Cet attribut correspond à l'URL à laquelle se trouve le fichier correspondant. Attention toutefois, dans le cas d'une URL relative, de bien comprendre où se trouve le script en fonction de l'URL effective (celle affichée par le navigateur) qui appellera le script. Attention donc par exemple aux include en PHP.

En revanche, deux attributs sont assez souvent confondus, il s'agit des attributs language et type.
Il faut déjà savoir que le premier est deprecated depuis HTML 4 alors qu'au contraire, le second est required. Cela signifie qu'il faut bannir language.
La syntaxe correcte devient donc
<script type="text/javascript"></script>
Mais alors, si l'attribut language est à bannir, pourquoi le retrouve-t-on si souvent ?
D'abord, parce que malheureusement, plusieurs facteurs empêchent de l'éradiquer.
Déjà, de nombreux scripts usuels sont bien référencés et recopiés tels quels bien que très anciens. Du coup, l'attribut se propage facilement.
D'autre part, peut-être surtout, parce que beaucoup ignorent la signification de cet attribut.
A la base, il servait à indiquer le langage et la version du langage de script utilisé. Cependant, aucune norme n'a été trouvée pour savoir ce qu'il pouvait bien contenir, ce qui a donc amené à ce qu'il soit déprécié. De toute façon, le seul langage de script universellement reconnu par les navigateurs est JavaScript (quelle que soit sa déclinaison : ECMAScript, JScript, ...) donc l'information n'a que peu d'intérêt. De même, préciser une version à utiliser n'a pas vraiment de sens : JavaScript, pour des raisons de rétro-compatibilté ne perd pas de fonctionnalités, il ne fait qu'en accepter de nouvelles !

Note : en HTML5, l'attribut type n'est plus requis et dans cette version, la syntaxe
<script[ src="..."]></script>
est désormais suffisante.

  • Le contenu

Pendant longtemps (et on retrouve encore couramment la syntaxe), les scripts étaient entourés soit de commentaires HTML soit d'entités CDATA :
<script type="text/javascript"><!-- 
  // Code JavaScript 
--></script> 
<script type="text/javascript"><![CDATA[ 
  // Code JavaScript 
]]></script>

Là encore, la pratique remonte à un temps que les moins de 20 ans (voire plus !) n'ont pas connue !
Ces syntaxes, héritées du XML, servaient à l'origine à éviter que les navigateurs ne possédant pas d'interpréteur JavaScript (on ne parle pas de ceux qui ont JavaScript désactivé, bien de ceux pour lesquels JavaScript n'existe tout simplement pas !) n'essayent d'interpréter le contenu du script comme du HTML. De mémoire, on parle là de IE3 et de NS3. Il me semble que la part de marché de ces navigateurs atteint depuis longtemps un seuil qui rend cette technique quelque peu obsolète !

  • Où placer les scripts ?

Plusieurs écoles s'affrontent à ce niveau.
Une chose est sure : il est demandé de séparer les différentes couches du document : le HTML pour le contenu, le CSS pour la mise en forme et le JavaScript pour l'ergonomie (ou le le comportement). Ainsi, insérer ses scripts en plein milieu du document est assez maladroit.
Pendant un temps, les bonnes pratiques recommandaient de placer les scripts entre les balises <head> et de les initialiser via l'événement onload de l'objet window.
Cette façon de procéder est plutôt satisfaisante mais l'événement onload implique que l'ensemble du contenu de la page soit chargé avant de lancer les scripts (donc y compris les éléments dits remplacés : images, iframes, object, etc.) et comme les pages Web deviennent de plus en plus gourmandes en ressources externes, cela fini par nuire à l'expérience utilisateur.
Différentes techniques existent pour pallier cela, entre autre, l'utilisation de l'événement DOMContentLoaded, mais qui n'est pas (encore) suffisamment universel pour être totalement satisfaisant.
La problématique est que pour pouvoir utiliser un script, il faut que les éléments du DOM qu'il va utiliser existent au moment où il est appelé. Une solution efficace est alors de placer les scripts juste avant la fermeture du document (avant la balise </body>), ce qui permet d'être sûr que les éléments du DOM ont été créés et de conserver la notion de séparation des couches.
Gardez toutefois à l'esprit que quelle que soit la solution choisie, elle aura une importance majeure lors de l'écriture de codes destinés à être réutilisés.

Vous devez être identifié pour poster un commentaire.

18/01/2012

Permalink 20:47:56, Catégories: Web, Javascript, Récapitulatif Web, Récapitulatif, 758 mots   French (FR) , bovino

[Web] Comprendre document.write() en JavaScript

S'il est bien une méthode méconnue en JavaScript, c'est la méthode write() de l'objet document.

La syntaxe est pourtant simple :
document.write(arg1, arg2, ..., argn);
Les arguments attendus sont des chaînes de caractères (ou tout du moins des arguments possédant une méthode toString())
Vous noterez au passage que le nombre de paramètres que l'on peut passer à cette méthode est indéterminé.
L'instruction précédente aura pour effet d'ajouter la valeur de chaque paramètre dans la page.
Par exemple
document.write('toto', 12, [1,2,3]);
affichera :

toto121,2,3

Notez que chaque argument est ajouté à la suite du précédent sans insérer de séparateur.
Malgré tout, certaines valeurs affichent un résultat inattendu :
document.write(false, {toto: 'tata', foo: 'bar'});
affichera :

false[object Object]

c'est-à-dire qu'un booléen ne sera pas transformé en 0 ou 1 mais en false ou true et un objet affichera (en fonction du navigateur) [object Object].

Jusque là, rien de vraiment compliqué à comprendre, d'autant que l'on passe habituellement un seul paramètre correspondant à une chaîne à afficher.

Cependant, le comportement de cette méthode dépend de l'état du document au moment de son appel.
En effet, un document HTML peut avoir deux états distincts : ouvert ou fermé.
Lorsque le navigateur reçoit un contenu HTML à afficher, il commence par ouvrir un document (le flux) puis interprète le code HTML en affichant son contenu et en construisant le DOM et une fois l'intégralité du code interprété, il ferme le document.
Pendant que le document est ouvert, si le navigateur rencontre une instruction JavaScript write(), alors ses arguments sont insérés à l'emplacement de cette instruction dans le code.
C'est le comportement attendu de cette méthode.
Mais il faut savoir que document.write() a besoin que le document soit ouvert pour pouvoir fonctionner correctement. Que se passe-t-il alors si le document est fermé ?
Dans ce cas, JavaScript va appeler en interne l'instruction document.open() puis exécuter le write().
Or document.open() correspond à l'ouverture du flux d'affichage, ce qui signifie que l'appel à cette méthode va recréer un nouveau flux, en commençant par supprimer l'existant.
Pour vous en convaincre, ouvrez une console JavaScript (par exemple Firebug pour Firefox) et dans la ligne de commande, tapez l'instruction
document.open();
et vous constaterez que la page va devenir blanche. Au passage, vous noterez aussi que l'indicateur de chargement se met en place (à la place du favicon), ce qui est le cas lorsque le flux est ouvert.
De la même manière, si vous entrez
document.write('Hello world !');
dans la console, vous constaterez que l'ensemble du contenu a été remplacé par le message "Hello world !". Vous pourrez aussi vérifier que l'indicateur de chargement est toujours actif : le document n'a pas été refermé.
Si ensuite vous entrez l'instruction
document.close();
dans la console, l'indicateur de chargement disparaitra au profit du favicon par défaut.

La première impression que l'on pourrait avoir en comprenant ce fonctionnement serait de se dire qu'il faut effectivement faire attention au contexte avant d'utiliser cette méthode.
En fait, il faut surtout considérer write() comme une méthode à bannir.
Déjà, parce qu'une méthode dont on ne peut garantir le comportement n'est pas à recommander.
Ensuite, parce que les bonnes pratiques en développement Web préconisent de séparer les couches : HTML pour l'affichage, CSS pour la mise en forme et JavaScript pour le comportement : utiliser la méthode write() implique d'introduire au niveau de l'affichage du JavaScript qui n'a rien à y faire, surtout que pour manipuler le document, de nombreuses méthodes du DOM sont disponibles et beaucoup plus fiables.
On pourrait aussi évoquer le fait que l'utilisation de write() interdit l'accès aux informations à ceux qui, pour une raison quelconque, ont JavaScript désactivé. Mais surtout, son utilisation (et son existence) force les navigateurs à une pratique particulièrement désagréable et dommageable qui est le chargement des scripts de façon synchrone.
En effet, l'affichage de la page doit être garantit par le navigateur, or si un script possède une instruction write(), alors il est important de pouvoir prévoir de façon certaine à quel endroit du document ses paramètres seront affichés, c'est pour cela que les navigateurs bloquent l'interprétation de la page pendant le chargement et l'évaluation des scripts (à la différence des autres éléments de la page, comme les images ou les iframes) ce qui retarde d'autant l'affichage du reste du contenu.

Vous devez être identifié pour poster un commentaire.

11/11/2011

Permalink 14:46:23, Catégories: PHP, Web, Javascript, Récapitulatif Web, Récapitulatif, 370 mots   French (FR) , bovino

[Web] Un classique AJAX : utiliser les données au bon moment !

S'il est une erreur classique chez les débutants en AJAX, que l'on retrouve régulièrement sur le forum AJAX, c'est de vouloir utiliser les données du serveur avant de les avoir reçues.

Faisons une petite analogie.
Imaginons que vous ayez une poule. Tous les matins, vous souhaitez savoir combien d’œufs ont été pondus, vous envoyez donc quelqu'un les compter.
J'imagine, qu'au moment même où cette personne part compter les œufs, il ne vous viendrait pas à l'esprit de l'appeler pour lui demander le compte : la moindre des choses est d'attendre qu'elle soit revenue car avant, elle ne connait pas l'information !

Avec AJAX, c'est exactement pareil. Le premier A de l'acronyme signifie asynchronous (asynchrone), c'est-à-dire que JavaScript ne va pas attendre la réponse du serveur avant de continuer à exécuter le code, sauf bien entendu si vous avez spécifié le mode synchrone.
Ainsi, le seul moment où l'on est sûr d'avoir reçu la réponse est lorsque la propriété readyState de l'objet XMLHttpRequest vaut 4 et que la propriété status correspond à un code de réussite de la requête (classiquement 200). C'est pourquoi tous les traitements se basant sur la réponse du serveur doivent être traités dans le callback de la requête..

Avant d'écrire son code, il est donc fondamental de se demander si les données que l'on veut utiliser existent ou non.

A titre d'exemple, un petit code :

var xhr = new XMLHttpRequest(), monResultat; 
xhr.open('POST', url); 
xhr.onreadystatechange = function(){ 
  if(xhr.readyState == 4 && xhr.status == 200){ 
  monResultat = xhr.responseText; 
  alert(monResultat); 
  } 
}; 
xhr.send('variable=valeur'); 
alert(maVariable);

Ici, le premier alert() affiché sera celui de la dernière ligne : JavaScript n'attend pas la réponse du serveur pour continuer à exécuter le code et cette alerte affichera undefined, puisqu'au moment où cette instruction est interprétée, aucune affectation n'a encore été faite pour maVariable ! Puis, lorsque le serveur aura répondu, le second alert() sera affiché avec cette fois la valeur attendue.

Voir aussi :

Vous devez être identifié pour poster un commentaire.

03/11/2011

Permalink 20:25:32, Catégories: Web, Javascript, Récapitulatif Web, Récapitulatif, 615 mots   French (FR) , bovino

[Web] Les fonctions de rappel (callback) ou les utilisations cachées de eval()

Il existe de nombreux cas en JavaScript qui nécessitent l'utilisation de fonctions de rappel (callback en anglais).
Une fonction de rappel est une fonction passée en paramètre d'une autre fonction. Pour JavaScript, c'est le cas par exemple de setTimeout(), setInterval() ou encore des fonctions appelées par un gestionnaire d'événement.

Cette notion de fonction de rappel est d'autant plus difficile à appréhender pour les débutants qu'il existe différentes façons distinctes de la définir, dont certaines erronées.

Les trois plus fréquentes sont les suivantes :

  1. document.onclick = maFonction();
  2. document.onclick = "maFonction()";
  3. document.onclick = maFonction;
  1. setTimeout(maFonction(), délai);
  2. setTimeout("maFonction()", délai);
  3. setTimeout(maFonction, délai);

Les exemples (1) sont tout simplement faux et ne produiront pas le résultat attendu. Ils sont un mélange entre les deux formes suivantes et dues à la confusion entre une fonction et le résultat de l'exécution de celle-ci.
Lorsque l'interpréteur JavaScript rencontre la notation maFonction() (donc avec les parenthèses), il comprend qu'il faut exécuter la fonction et le fait donc sur le champ. Or ce qu'attendent les méthodes nécessitant une fonction de rappel, c'est une référence à la fonction. Avec la notation des exemples (1), c'est le résultat de l'exécution qui sera affecté au clic ou au timer, sans attendre le moment souhaité par le développeur.
Les exemples (2) sont syntaxiquement corrects, mais fortement marqués d'obsolescence. En fait, dans ces cas ci, il n'y a pas de fonction de rappel de définie mais une portion de code qui sera évaluée au moment de l'appel. En interne, JavaScript va utiliser la méthode eval() pour interpréter le code, comme le montre l'exemple suivant :

function eval(){ 
  alert('eval() is evil !'); 

function toto(){ 
  alert('toto'); 

document.onclick = "toto()";

Dans cet exemple, c'est bien le message eval() is evil ! qui sera affiché. Cette façon de procéder, liée à la préhistoire de JavaScript, est fortement déconseillée !

Dans les exemples (3), c'est bien la référence à la fonction qui est utilisée De ce fait, lorsque le moment sera venu, cette fonction pourra être exécutée sans passer par l'utilisation de eval(), comme le montre l'exemple suivant :

function eval(){ 
  alert('eval() is evil !'); 

function toto(){ 
  alert('toto'); 

document.onclick = toto;

C'est bien le message toto qui est affiché lors du clic sur la page.

Note : si vous utilisez une console (par exemple celle de Firebug) pour tester les codes ci-dessus et que vous faites "Exécuter" deux fois de suite, vous obtiendrez le message eval() is evil, cela est dû au fait que l'injection du code dans le document utilise elle aussi des méthodes utilisant en interne eval() qui vient d'être redéfinie.

Mais alors, comment passer des paramètres à la fonction de rappel ?
Effectivement, le seul moyen de passer des paramètres à la fonction de rappel était celle des exemples (2), qui sont déconseillés.
Pour passer des paramètres, il va falloir utiliser une quatrième technique qui consiste à englober l'appel de la fonction de rappel dans une fonction anonyme. Cette fonction anonyme étant définie au moment de l'affectation, elle correspond donc à une référence à une fonction et non à une exécution de celle-ci :

function eval(){ 
  alert('eval() is evil !'); 

function toto(texte){ 
  alert(texte); 

document.onclick = function(){ 
  toto('Paramètre !'); 
};

Ce code affiche bien le paramètre passé à la fonction toto, elle-même englobée dans une fonction anonyme.

Vous devez être identifié pour poster un commentaire.

14/10/2011

Permalink 22:15:11, Catégories: Web, Javascript, Récapitulatif Web, Récapitulatif, 557 mots   French (FR) , bovino

[Web] Le "core" JavaScript s'enrichit de nouvelles méthodes.

C'est une information qui est, il me semble, passée relativement inaperçue mais qui est selon moi assez intéressante à souligner.
Le noyau JavaScript, qui était resté longtemps figé, s'est enrichi avec les dernières versions des navigateurs, de nouvelles méthodes bien utiles.

Pour rappel, le noyau JavaScript (aussi appelé core JavaScript), par opposition au DOM JavaScript (ou JavaScript côté client) regroupe les objets natifs de JavaScript et surtout, la partie censée être commune à toutes ses variations.
Il regroupe en particulier les objets natifs Array et String qui ont vu leur prototype amélioré.
Il est à noter que ces ajouts sont aussi disponibles (sauf mention contraire) dans Internet Explorer depuis la version 9.

  • L'objet Array

La méthode every()
Cette méthode permet d'appliquer à tous les membres du tableau une fonction de rappel afin de savoir si tous les éléments du tableau remplissent une condition.
Syntaxe
Array.every(callback, thisObjet);
Exemple
function isImpair(nb){ 
  return nb & 1; 

alert([1,5,17,89].every(isImpair)); 
alert([1,5,17,89, 100].every(isImpair));

La méthode filter()

Comme son nom l'indique, cette méthode permet de filtrer les éléments d'un tableau selon le résultat renvoyé par une fonction de rappel.
Syntaxe
Array.filter(callback, thisObjet);
Exemple
function isInferieurADix(nb){ 
  return nb < 10; 

alert([2,5,6,8,10,11].filter(isInferieurADix));

La méthode forEach()
Cette méthode permet d'appliquer un traitement à chaque élément du tableau.
Syntaxe
Array.forEach(callback, thisObjet);
Exemple
var tab = ['a','b','c','d','e'], 
  resultat = '', 
  i = 0; 
function arrayToString(){ 
  resultat += 'Rang '+i+'\t\tvaleur : '+this[i]+'\n'; 
  i++; 

tab.forEach(arrayToString, tab); 
alert(resultat);

La méthode map()
La méthode map() va appliquer à chaque élément du tableau le traitement de la fonction de rappel.La méthode map()
Syntaxe
Array.map(callback, thisObjet);
Exemple
var tab = ['a','b','c','d','e']; 
function double(val){ 
  return val + val; 

alert(tab.map(double));

La méthode some()
Similaire à la méthode every(), cette méthode va vérifier si au moins un des éléments du tableau est valide selon le résultat renvoyé par la fonction de rappel.
Syntaxe
Array.some(callback, thisObjet);
Exemple
function isInferieurADix(nb){ 
  return nb < 10; 

alert([10,20,30,40,50].some(isInferieurADix)); 
alert([5,10,20,30,40,50].some(isInferieurADix));

  • L'objet String

Ces méthodes renvoient la nouvelle chaîne mais ne modifient pas celle d'origine.

La méthode trim()
Supprime tous les caractères d'espacement en début et fin de chaîne.
Syntaxe
String.trim();
Exemple
var str = '\tTest '; 
var strTrimmed = str.trim(); 
alert('!'+str+'!\n!'+strTrimmed+'!');

La méthode trimRight()
Supprime les espacements en fin de chaîne.
Syntaxe
String.trimRight();
Exemple
var str = '\tTest '; 
var strTrimmed = str.trimRight(); 
alert('!'+str+'!\n!'+strTrimmed+'!');

La méthode trimLeft()
Supprime les espacements en début de chaîne.
Attention : étonnamment, cette méthode n'est pas (encore) disponible pour Internet Explorer et Opera...
Syntaxe
String.trimLeft();
Exemple
var str = '\tTest '; 
var strTrimmed = str.trimLeft(); 
alert('!'+str+'!\n!'+strTrimmed+'!');

À noter aussi, pour l'objet Date, l'apparition de la méthode toISOString().

Vous devez être identifié pour poster un commentaire.

08/11/2007

Permalink 15:17:04, Catégories: Web, Javascript, Récapitulatif Web, Récapitulatif OpenSource, 34 mots   French (FR) , Pierre-Baptiste Naigeon

[OpenSource][Web] Sortie de Prototype 1.6.0 et de script.aculo.us 1.8.0

Prototype 1.6.0 et script.aculo.us 1.8.0 sont tout deux sortis hier.

Vous pouvez les télécharger respectivement aux adresses suivantes :

- Prototype 1.6.0
- script.aculo.us 1.8.0

Vous pouvez trouver l'annonce originale sur le blog de Prototype.

Vous devez être identifié pour poster un commentaire.

18/07/2007

Permalink 11:25:48, Catégories: PHP, Web, Javascript, Référencement, (X)HTML/CSS, EDI, Zend Framework, Sécurité, Conférences, Récapitulatif Web, Récapitulatif OpenSource, 80 mots   French (FR) , Yogui &lt;g-rossolini@redaction-developpez.com

[OpenSource][Web] Mise en ligne de la nouvelle page Cours PHP

J'ai finalement pris le temps de terminer la nouvelle mise en page des cours et tutoriels PHP. Les cours sont maintenant mieux répartis en catégories, donc plus faciles à retrouver. J'en ai profité pour mettre un peu à l'écart les cours obsolètes, mais vous pouvez toujours les consulter si vous le voulez.

Vous pouvez poster ici vos commentaires et consulter cette page si vous souhaitez rejoindre la Rédaction pour ajouter vos articles à la liste.

http://php.developpez.com/cours/

Vous devez être identifié pour poster un commentaire.

11/11/2006

Permalink 01:17:39, Catégories: PHP, Web, Javascript, Conférences, Récapitulatif Web, Récapitulatif OpenSource, 68 mots   French (FR) , Yogui &lt;g-rossolini@redaction-developpez.com

[OpenSource][Web] Le forum PHP de l'Afup, bientôt en photos

Notre reporter vient de m'annoncer fièrement qu'il pourra nous rédiger un compte rendu (avec images et vidéos) du Forum PHP qui a eu lieu jeudi et vendredi cette semaine ! Nous aurons donc deux visions différentes des nouveautés de PHP, présentées par les grands noms de la communauté.

Au programme, il a été question d'Unicode avec PHP 6, de sécurité, d'Ajax, de design patterns, etc.

Surveillez la page des reportages !

Vous devez être identifié pour poster un commentaire.

09/11/2006

Permalink 21:55:23, Catégories: PHP, Web, Javascript, Conférences, Récapitulatif Web, Récapitulatif OpenSource, 217 mots   French (FR) , Yogui &lt;g-rossolini@redaction-developpez.com

[OpenSource][Web] La PHP Conference 2006 est terminée

Voilà voilà, je suis revenu hier soir de Francfort, après deux jours de conférences toutes plus intéressantes les unes que les autres.
Je rédigerai un résumé plus conséquent qu'un billet de blog, laissez-moi juste le temps d'organiser mes notes ;)

Pour vous donner un avant goût, il a été question de protection contre le spam, d'une introduction à AJAX, de certains Design Patterns encore en développement, etc.

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

28/10/2006

Permalink 00:16:56, Catégories: PHP, Web, Javascript, Récapitulatif Web, Récapitulatif OpenSource, 329 mots   French (FR) , Yogui &lt;g-rossolini@redaction-developpez.com

[OpenSource][Web] Firefox 2, la réponse de Mozilla à Microsoft

La fondation Mozilla vient de lancer la nouvelle version de son fameux navigateur : Mozilla Firefox 2 (en attendant Firefox 3, déjà en préparation comme le fait remarquer Cédric).

Firefox est mon navigateur quotidien : j'ai la flemme de tous les tester, celui-ci me convient, je ne m'en sépare plus.

Pourtant, cette fois, les nouveautés sont un peu floues. J'ai du mal à voir comment on justifie un changement de version majeure, à part si on prend en compte l'aspect publcitaire...

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Blog de la rubrique Web

Catégories


Rechercher

<  Mars 2012  >
Lun Mar Mer Jeu Ven Sam Dim
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web