Tout le monde s'accorde à dire aujourd'hui que les frames sont plus généralement source d'ennuis que d'avantages dans la conception d'un site web. (Je ne reviendrais pas sur les pages impossibles à marquer, l'indexation difficile et la surcharge serveur engendrée par l'augmentation du nombre de fichiers à télécharger.)

Cependant, j'avais à l'époque trouver une utilisation amusante de l'attribut target : et si celui-ci, au lieu de désigner la fenêtre de destination du lien servait maintenant à désigner l'élément de destination, en utilisant un ID. La page liée se chargerait alors dynamiquement à l'intérieur de la page courante, sans avoir à recharger la page courante. Les avantages des frames sans leurs inconvénients.

Aujourd'hui, tout le monde me dira que c'est très facilement réalisable en utilisant l'objet XMLHttpRequest. Mais à l'époque, cette technologie n'était pas aussi répandue qu'aujourd'hui et je trouvais qu'il s'agissait d'une bonne voie à prendre pour le futur des pages web.

Pour expliquer ma vision, je souhaitais développer une page web simulant ce phénomène en utilisant Javascript. Malheureusement, mon ignorance de l'objet XMLHttpRequest et ma méconnaissance des fonctionnalités du DOM m'ont empêché de réaliser cette page.

Suite à un billet récent de Laurent Jouanneau (pointant sur un autre encore plus intéressant), j'ai repensé à cette histoire. Avec mes connaissances actuelles de l'objet XMLHttpRequest et de la manipulation du DOM, je pouvais facilement réaliser cette démonstration. Sitôt dit, sitôt fait :)

J'ai fait une petite page web affichant les fichiers et les dossiers de mon répertoire mess. Les deux liens possèdent un attribut target pointant vers un ID dans la page. Lorsque l'utilisateur clique sur un lien, le contenu pointé est chargé directement dans l'élément pointé par l'attribut target. La responsabilité du formatage reste donc du côté du serveur (pas comme AJAX) mais cela permet cependant de réaliser de manière simple et rapide une application web plutôt dynamique.

La version actuelle utilise bien sûr du Javascript et n'a pour le moment été testé que sur Firefox et Safari, mais cette fonctionnalité pourrait facilement être disponible nativement dans les navigateurs. Il faudrait pour cela ajouter une fonction open() dans les éléments Node comme il en existe une dans Window et normaliser le fait qu'une valeur d'attribut target commençant par un # signifie d'appeler cette fonction open() sur l'élément pointé plutôt que sur la Window.