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 :

<link rel="next" href="http://www.monsite.com/page2.html" />

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 );

Tags : , ,