Firefox et le prefetch des link rel next

Sous ce titre cryptique se cache un problème méconnu : Le navigateur Mozilla Firefox pré-charge certaines pages avant leur affichage, pour accélérer la navigation, comme les liens relatifs :

Cette initiative est louable, sauf dans certains cas précis où la page appelle une fonction « en dur » : Mise en session d’une variable, statistiques, etc. Le problème est que la fonction sera également appelée par la page suivante, peu pratique dans le cas d’un historique de navigation, d’un compteur de pages vues, ou de statistiques sur des navigateurs ne chargeant ni images ni javascript.

Heureusement, une solution simple existe :
Mozilla envoit une entete http x-moz, qu’il est possible de récupérer en PHP via l’appel à la variable $_SERVER[‘HTTP_X_MOZ’]. Si elle vaut « prefetch », la page est appelée en mode pré-chargement, donc n’est pas « vue » par le visiteur.

if (isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] == 'prefetch'){
// Le prefetch est activé
}
else {
// Le prefetch est désactivé, on peut lancer le script
}

A noter qu’il est également possible de prendre le problème à l’inverse, en enlevant la fonctionnalité de liens adjacents, au risque de perdre une fonctionnalité utile, comme sur WordPress :

//Ajouter dans functions.php
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );

Partager cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  • Merci Darkichou, je me coucherai moins bête cette nuit 🙂
    Mais bon, précharger des pages, ça me rebute, surtout quand on pense aux pauvres serveurs qui doivent servir plein de pages souvent inutilement dans le cas du rel= »next »…

  • Ca peut être utile dans le cas d’un blog où les articles se suivent, chronologiquement et sur le sujet, sachant que dans le cas d’un WordPress, un plugin mettra ainsi en cache la page suivante … mais dans le cas de mon blog… nan :3

  • Je suis en train de développer un nouveau thème sur mon site, et j’ai mis temporairement des urls xxx… Je n’arrivais pas à comprendre pourquoi j’avais des logs d’erreurs sur ces adresses, alors que je ne cliquais pas sur ces liens.

    Maintenant que je viens de lire ton article, je comprends un peu mieux.

    PS: deuxième fois en deux semaines que je trouve une solution à l’un de mes problèmes en venant sur ce site. Good work 😉