Comment contrecarrer le lecteur de Safari 5

Le lecteur de Safari 5 affiche les pages d'un site sans la publicité, apparemment une façon pour Apple de s'en prendre à Google dont le service Adsense monétise la majorité des sites Web.

Cela contrevient aux règles d'un site dès lors que les conditions d'utilisation prohibent la modification des pages avant l'affichage, par un outil quelconque.

Reste donc aux webmasters de trouver le moyen de défaire cet outil afin de préserver leurs revenus publicitaires.

Apple n'a pas réalisé cet outil elle-même, elle s'est contenté d'intégrer un logiciel open source, Readability. Le code source est ici.
D'ailleurs l'équipe de Readability a dans un premier temps félicité Apple pour son produit avant de s'apercevoir qu'elle avait utilisé son propre code.

On voit qu'on est entre intellectuels!

Pages test

Pour vérifier l'efficacité des mesures que peut prendre un webmaster pour contrecarrer ce lecteur, voici une liste de pages de ce site sur lesquels le bouton du lecteur n'apparaît pas dans le navigateur Safari.
On pourra ainsi vérifier dans le temps si c'est toujours le cas avec les prochaines versions de Safari.

Comment éliminer le lecteur

A partir des pages test, on va tenter de tirer des leçons.

Cependant, comme on peut le voir, il n'est pas facile de voir pourquoi le bouton du lecteur apparaît ou pas. Mais il y a des cas ou il apparaît toujours.
Une page avec un simple bloc de texte fait toujours afficher le lecteur. Lorsqu'on ajoute des tables, des images, des listes, cela devient moins évident.

La parcellisation d'un texte est ce qui semble contrecarrer le script dans Safari: il a du mal dans ce cas à former une page contenant un texte simple ce qui est son autre objectif à coté de celui d'embêter Google et tous ses affiliés.

Dans cette page, j'ai inclu le paragraphe qui suit dans un <div> et cela à suffit pour désactiver le lecteur.

Recourir à JavaScript

Le code suivant permet d'identifier le navigateur Safari:

var agent = navigator.userAgent;
var isSafari = agent.indexOf("Safari") > -1 && agent.indexOf("Chrome") == -1;

On recharge la page avec cette commande :

window.location.reload()

Cependant le lecteur de Safari construit un page réduite à partir du rendu produit par le navigateur et après que le code JavaScript ait été exécuté, aussi on ne peut pas tester l'état de la page avec JavaScript.

On utilisera plutôt JavaScript pour empêcher readability de fonctionner avec des fonctions qui n'agissent qu'avec Safari, que l'on reconnaît comme indiqué ci-dessus.

Exemple de code:

<script type="text/javascript">
var agent = navigator.userAgent;
var isSafari = agent.indexOf("Safari") > -1 && agent.indexOf("Chrome") == -1;
function reloading() { window.location.reload(); }
window.onblur=function()
{
if(isSafari) {
setTimeout(reloading, 6000);
}
}
</script>

Ce code recharge la page après six secondes quand on passe sous le lecteur et il réaffiche la page complète initiale.

Mais il gêne l'utilisation de la barre d'URL.
Et il ne devrait pas être utilisé avec avec des pages affichant des annonces publicitaire payées au nombre d'affichage.
A n'utiliser que si le nombre d'utilisateurs de Safari est très important.
Démo.

Si des outils comme le lecteur de Safari prolifèrent, nous devrions voir également se répandre des pages dynamiques dépendant du code JavaScript plutôt que des pages de texte facile à interpréter par ces outils.