RSS
 

Archive for the ‘Javascript’ Category

Détection des sites visités…par CSS

22 avr

Je suis tombé sur cet article ce week-end et j’ai vraiment été bluffé par la simplicité et l’efficacité du script proposé. L’auteur explique comment il peut retrouver les sites visités par l’utilisateur en utilisant uniquement la propriété CSS visited d’un lien hypertexte.
Comment ça marche ?
En fait dans la page l’auteur à « caché » la liste des sites qu’il désire tester sous forme de liens hypertextes.

<a href="http://urlToTest/">MySite.com</a> ....

Il a aussi définit une propriété css particulière pour les liens visités
a:visited { .. height:100px; ... }

Ensuite votre navigateur fait le reste en marquant les liens que vous avez déjà visités
Il reste plus qu’à parcourir ces liens et de tester leur propriété offsetHeight.
var items = document.getElementsByTagName('a'); for (var i=0,i<items.length; i++) { if (items[i].offsetHeight == 100) { //Site already visited .....

Simple et efficace….

 
 

Release V0.9 de Rialto

19 avr

Une nouvelle version de Rialto (v0.9) est disponible dans la section download du site

Quoi de neuf:

* Correction des bugs
* les onglets ont maintenant un nouveau paramètre ‘orientation’ qui permet de déterminer le sens d’affichage des titres d’onglets avec comme valeurs `t’ pour top, `l’ pour left, `r’ pour right et `b’ pour bottom.
*intégration de la console de débugage firebug lite. Si vous disposez du plugin dans Firefox les messages lui seront envoyés. Sinon (IE ou FF sans firebug) une émulation de la console apparait dans un frame flottant. J’ai déjà évoqué cette intégration ici
* le composant grid devient skinable

La prochaine version de Rialto sera la V1 et elle est prévu pour le mois de septembre.

 
 

XML/Javascript UI developement

06 avr

Pour faire suite à mon précédent article sur la conception de GUI, l’article de Jonathan Allen pose une nouvelle fois la question en abordant le sujet de Javascript et en présentant la nouvelle approche de Firefox 3.0 avec Gran Paradiso.

 

Modele de boite et quirks mode….

05 avr

L’une des difficultés dans le design de composants javascript provient des différences d’interprétation du modèle de boite de la part des navigateurs. Pour faire simple, le W3C spécifie que la largeur ou la hauteur d’un élément doit correspondre à son contenu effectif. C’est à dire que les dimensions de padding, border et margins doivent être ajouter aux dimensions spécifiées. Malheureusement, Microsoft dans ces premières versions de navigateurs (jusqu’à internet explore 5) utilise un autre rendu, c’est à dire que la taille d’un élément corresponds à sa taille globale (incluant les bordures, marges….).

Vous me direz « bon c’est pas grave, ils ont corrigé le tir depuis la version 6″. Oui mais non en raison du mode Quirks (par opposition au mode standard) qui permet au navigateur d’assurer une rétro-compatibilité en conservant l’ancien mode de calcul. Et comment est on en mode quirks (entre autre) ?

En utilisant une page HTML sans DOCTYPE autant dire dans la majorité des cas

Pour visualiser le phénomène il suffit de tester le code suivant dans une page HTML

<html>
<head>
	<title></title>
</head>
<script>
function init(){
var div=document.getElementById('div1');
div.style.width="200px";
div.style.height="100px";
div.style.border="5px solid red";
div.style.backgroundColor="blue";

var iw=document.getElementById('width');
var ih=document.getElementById('height');
var iow=document.getElementById('offwidth');
var ioh=document.getElementById('offheigth');

div.onmouseover=function(){
iw.value=this.style.width;
ih.value=this.style.height;
iow.value=this.offsetWidth;
ioh.value=this.offsetHeight;
}

div.onmouseout=function(){
iw.value="";
ih.value="";
iow.value="";
ioh.value="";
}

}
</script>
<body onload="init();">
<div id='div1'></div>
Width :<input type='text' id='width'/>
Height :<input type='text' id='height'/>
OffsetWidth :<input type='text' id='offwidth'/>
OffsetHeight :<input type='text' id='offheigth'/>
</body>
</html>

Vous observerez selon les navigateurs la différence entre la taille fixée (width et height) et la taille réellement occupée (offsetWidth et offsetHeight) en passant la souris sur la div.

Alors quelles sont les solutions:

  • introduire dans vos pages la fameuse doctype.
  • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/DTD/strict.dtd">
  • Utiliser des techniques de détection de navigateurs pour au besoin redimensionner les éléments

La plupart des frameworks ajax utilise la 2eme solution dans la mesure ou ils ne maîtrisent pas les pages dans lesquelles ils sont exécutés.

Attention il ne faut pas oublier de tester le mode de rendu pour affecter ou non les nouvelles tailles. Il suffit pour cela de tester la propriété document.compatMode

  • si la propriété vaut « CSS1Compat il s’agit du mode standart et on n’a pas besoin de modifier les tailles
  • si la propriété vaut « BackCompat » il s’agit du mode Quirks et il faut modifier les tailles

Ci-dessous un squelette de fonction permettant de modifier le width d’un objet

function(oHtml){
	if (window.event && document.compatMode== "BackCompat") {
	//Récuperer les border,margins et padding
	var delta=......;
	//MODEL IE On augmente les tailles
	oHtml.style.width =  parseInt(oHtml.style.width) + delta +"px";
	}
}

Ce probleme peut sembler anodin mais la construction de composant complexes nécessitent l’assemblage d’un grand nombre d’élément HTML et les positionnement sont très rigoureux. Des décalages de 1 ou 2px ont bien évidemment des conséquences sur la cohérence du composant.

Et voilà tout ce travail pour un bug qui date ….

 
 

Lien utile…

02 avr

Cela fait longtemps que je veux rendre hommage au site quirksmode.
Pour ceux qui veulent utiliser javascript et l’api Dom ce site doit être dans vos signets. Il nous a vraimment été utile quand nous avons fait la première mise en oeuvre de Rialto (et j’y trouve toujours des informations).

N’hésitez pas donc à visiter ce site.

 
 

Firebug Lite

16 mar

Firebug est devenu un outils indispensable pour le développement de composants « riches » en javascript. Malheureusement son utilisation se limite à firefox. Pour offrir un service minimum dans d’autres navigateurs l’équipe de firebug propose Firebug Lite, une émulation de la célèbre console. Je viens de tester son intégration dans Rialto. Le premier constat est que le script est très simple et que les fonctionnalités offertes sont bien pensées. On retrouve les 4 types de messages (log,info,warm et error) mais aussi des petits plus comme les console.time et console.timeEnd qui permettent de mesurer le temps d’exécution d’un bloc de script. On peut également afficher l’ensemble des propriétés d’un objet avec la fonction console.dir ou le contenu d’un noeud avec la fonction console.dirxml

Un champs texte permet également d’évaluer n’importe quelle expression javascript. Pratique pour vérifier les propriétés de vos objets.

firebug

 
1 Comment

Posted in Javascript

 

E4X : manipuler du XML

10 mar

Rahul Kumar Gupta :
« E4X offre une approche plus intuitive pour manipuler du Javascript pour les developeurs qui utilise XML dans leur applications Javascript. Le code E4X est plus simple pour lire et ecrire du XML que les model classique comme XSLT, XQuery et DOM »

E4X Adds Direct XML Support to JavaScript