Comme le passage à HTML5, évoqué dans l'entrée précédente pose le problème de la compatibilité des navigateurs, j'ai voulu essayer de savoir ce qu'utilisent mes lecteurs.
Problème : ce n'est pas évident du tout. D'abord parce que mon serveur Web est pollué de zillions de requêtes dont très peu, finalement, concernent vraiment le contenu réel : il y a les gens qui viennent depuis les moteurs de recherche (et dont l'écrasante majorité ne doit pas trouver ce qu'ils cherchaient, ou trouvent des choses idiotes : la page la plus populaire de mon site, et de très loin est celle-ci via Google images, ce ne sont pas des gens intéressés par moi ou par ce que je raconte), il y a les moteurs de recherche eux-mêmes et toute la jungle des robots butineurs, et il y a les agrégateurs… Une même personne peut revenir très souvent et plein de personnes peuvent se cacher derrière la même IP. Bref, c'est compliqué.
J'ai opté pour la méthodologie suivante : j'ai pris l'ensemble des
requêtes depuis le 28 août, j'ai sélectionné uniquement celles qui
demandaient une URL sous /~david/weblog/
,
puis j'ai trié par couple IP+UA
(où UA désigne l'User-Agent, c'est-à-dire l'identifiant
du navigateur tel qu'il est renvoyé par le navigateur). Je n'ai gardé
que les couples IP+UA ayant fait au moins 5
requêtes dans la période (façon de m'assurer que ce sont de « vrais »
lecteurs et pas des gens tombés là par hasard) : on peut appeler un
tel couple IP+UA un « lecteur », même si
bien entendu cela ne correspond pas forcément à une personne physique
(par exemple parce que quelqu'un peut utiliser régulièrement deux
navigateurs différents, ou deux ordinateurs différents, auquel cas il
apparaît deux fois, et bien sûr parce qu'il y a encore des robots dans
le tas). À ce stade-là, il restait 575 lecteurs. (Je jette le nombre
de requêtes de chacun, qui ne m'intéresse pas.) Sur ces 575 lecteurs,
j'ai essayé d'identifier (de façon semi-manuelle) tous les navigateurs
habituels, en jetant tout ce qui est robot ou agrégateur (ou, en fait,
tout ce que je ne comprenais pas) : il me reste 323 entrées, qui se
répartissent de la façon
suivante : [#]
118 | Firefox 6.0 |
49 | Firefox 3.6 |
32 | Chrome 13.0 |
17 | Firefox 5.0 |
11 | MSIE 8.0 |
11 | Firefox 9.0a1 |
10 | Opera 9.80 |
8 | Safari 5.0 |
7 | Safari 5.1 |
7 | MSIE 7.0 |
7 | MSIE 6.0 |
7 | Firefox 4.0 |
7 | Firefox 3.5 |
5 | MSIE 9.0 |
5 | Firefox 7.0 |
5 | Firefox 3.0 |
3 | Safari 4.0 |
3 | Chrome 12.0 |
2 | Chrome 14.0 |
1 | w3m 0.5.2 |
1 | Safari 4.1 |
1 | Safari 3.0 |
1 | Firefox 2.0 |
1 | Firefox 1.5 |
1 | Chrome 9.0 |
1 | Chrome 7.0 |
1 | Chrome 15.0 |
1 | Android 2.3 |
Bon, je ne peux qu'insister sur le fait que ça ne veut pas dire grand-chose (par exemple, les 11 « lecteurs » utilisant Firefox 9.0, c'est plutôt une personne qui a changé 11 fois de version), mais ça donne quand même une idée : très grossièrement 68% de mon lectorat qui ne passe pas par un agrégateur utilise Firefox, 12% utilise Chrome (ou Chromium), 9% IE, 6% Safari et 3% Opera. Le navigateur le plus susceptible de poser problème est MSIE ≤8, et j'aimerais savoir s'il arrive encore à afficher mon site (je ne parle évidemment pas de comprendre le SVG ou le MathML, mais juste d'afficher quelque chose de vaguement lisible).
[#] Je profite de cette
table pour pousser une gueulante : avec tout ce que
le HTML a inventé, et tout ce que le CSS
permet de faire, il reste excessivement pénible de fixer l'alignement
d'une colonne d'un tableau (par exemple, comme je voudrais le faire
ici, aligner sur la droite les chiffres de la première colonne).
Le HTML5 a supprimé l'attribut align
qui
était la façon évidente de faire ça en HTML4, en
reléguant la fonction à CSS, mais
justement CSS n'offre pas vraiment de mécanisme qui
convienne. Naïvement on pourrait penser qu'ajouter
un <col style="text-align: right" />
fonctionnerait,
mais comme
Ian Hickson l'explique, ce n'est pas le cas, parce que les
propriétés CSS des colonnes ne servent que pour un très
très petit nombre de trucs, et il y a des raisons à ça (je trouve que
ces raisons assez peu convaincantes, d'ailleurs, mais je ne vais pas
entrer dans les détails). On peut toujours faire un truc
comme #maTable td:nth-child(n) { text-align: right
}
[#2], mais ce n'est
pas vraiment une réponse, parce que les cellules d'une table peuvent
faire plusieurs colonnes de largeur, donc il n'y a pas moyen de
sélectionner à coup sûr les cellules de la colonne n avec
un truc aussi simple que nth-child
… du coup, la
seule solution est de styler chaque cellule individuellement (ce qui
ne répond pas à la question : on ne fixe pas l'alignement de la
colonne, on fixe l'alignement de chaque cellule de la colonne). En
guise de protestation, je laisse le tableau non aligné.
[#2] Par contre, j'e
profiter de ça pour évoquer quelque chose d'autre : ma très grande
satisfaction à découvrir que le HTML5 a introduit
l'attribut scoped
sur l'élément style
, qui
permet d'ajouter des règles de style sur un élément et tous ses
descendants. En effet, en HTML4, on pouvait déjà
mettre des attributs style
sur un élément pour définir
des règles qui s'appliquent à lui, mais si on voulait mettre une règle
sur ses descendants, on était obligé de passer par la stylesheet
globale : pas moyen d'écrire par
exemple <table style="THIS td:first-child { text-align:
right }">…</table>
pour que tous les
premiers td
contenus dans la table
soient
alignés à droite : on devait soit mettre l'attribut style
séparément sur chaque balise td
de la table
,
soit donner à la table
un id
ou une classe
(ce qui n'est pas problématique en soi) et insérer la règle de style à
un tout autre endroit (ce qui, en revanche, est sérieusement merdique
quand on songe que le bout de HTML en question pourrait
être, par exemple, transcopié dans un autre document, par exemple par
un agrégateur, qui peut reproduire l'arbre DOM mais
pas chasser et interpréter les règles de style).
En HTML5, on peut
écrire : <table><style>td:first-child { text-align:
right }</style>…</table>
. Cela faisait des années que je me
disais que cette possibilité manquait !