Bonsoir,
Je bosse sur un site en Single Page App, autrement dit toute la navigation sur le site est gérée via des requêtes AJAX : ces requêtes retournent du HTML ou du JSON pour générer les vues et les injecter dans le conteneur lié à la vue.
Rien de bien sorcier ici, c'est du classique. Et pourtant il y a une question simple à laquelle je ne parviens pas à trouver de réponse : quel est le HTML le plus approprié pour un lien fonctionnant avec AJAX ?
Jusqu'ici j'utilisais un tag <a> sans renseigner d'attribut href:
<a class="ajax-link" data-href="cible.html">
Seulement l'attribut href est obligatoire d'après les spécifications, et de plus les navigateurs ont tendance à retirer le curseur en forme de main au survol lorsque l'attribut href est absent.
J'ai aussi beaucoup vu le href assigné à un hash vide :
<a class="ajax-link" href="#" data-href="cible.html">
Mais si l'évènement n'est pas capturé, le navigateur remonte la barre de défilement au sommet de la page. De plus, lorsqu'on gère l'historique avec un plug-in comme history.js, l'évènement statechange est déclenché lors du passage aucun hash -> hash vide.
Enfin, on peut remplir le href avec le lien attendu, et bloquer la propagation de l'évènement en JavaScript. Si JavaScript est désactivé, on peut voir ça comme un fallback, bien qu'il me paraisse impossible d'arriver à un résultat correct de cette façon si JS est désactivé sur une SPA.
<a class="ajax-link" href="cible.html">
A moins que ce soit l'élément <a> qui ne convient tout simplement pas pour les requêtes AJAX ? Auquel cas on se contenterait de <span> ou <div> avec cursor:pointer; ? Cela soulève quelques débats pour ma part : est-ce qu'une requête AJAX est un hyperlien ? à partir de quand un changement dans le document par JavaScript peut être considéré comme un changement de page ?
Lorsque j'utilise d'autres éléments comme des boutons ou des pictogrammes pour un lien via AJAX, je les encapsule dans un <a> sans href histoire d'améliorer la sémantique du document. Mais je me dis que je fais peut-être pire que mieux...
Je n'ai pas trouvé de documentation sur le net qui me laisse croire que les grands manitous du Web, alias W3C/WHATWG, ont déjà tranché sur cette question. Alors je viens demander votre avis. Qu'est-ce que vous utilisez personnellement ?
Partager