Mes impressions sur le web, les standards et autres…


Sacré Opera

Continuant mes tests sur les types MIME, j’ai décidé aujourd’hui d’affiner ma détection des types de média supportés en tenant compte du coefficient de préférence. C’est cette valeur à virgule précédée de q= qui accompagne certains types dans l’en-tête accept. Voici l’en-tête accept renvoyé par Opera 7.22 :

text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1

Cela m’a permis de constater que ce navigateur avait une préférence pour le type text/html plutôt que pour application/xhtml+xml. Or, c’est ce dernier que j’envoyais, me basant simplement sur sa présence ou non dans l’en-tête accept.

La solution généralement donnée pour envoyer le bon en-tête (et que j’ai rappellée moi même dans le billet précédent) est donc erronée, ou du moins incomplète. Cela est d’autant plus évident que dans le cas présent, Opera a un gros trou de mémoire en ce qui concerne le DOM si la page est servie avec le type application/xhtml+xml (*ricanements*).

J’ai donc concocté une fonction plus précise et tenant compte des coefficients de préférence, ce qui a pour conséquence que les pages sont envoyées avec le type text/html sous Opera (fonction basée sur ce que j’ai mis en place dans ma classe output):

function sendType()
{
    $mime_types = array('application/xhtml+xml', 'text/html');
    $mime_type_selected = 'text/html';
    $q_prefs = 0.0;
    
    foreach( $mime_types AS $mime_type )
    {
        if( !preg_match('/' . preg_quote($mime_type, '/') . '(?:;q=([0-9]\.[0-9]))?/', $_SERVER['HTTP_ACCEPT'], $match) )
        {
            continue;
        }
        
        $q = ( !empty($match[1]) ) ? $match[1] : 1.0;
        
        if( $q > $q_prefs )
        {
            $mime_type_selected = $mime_type;
            $q_prefs = $q;
        }
    }
    
    header('Content-Type: ' . $mime_type_selected . '; charset=iso-8859-15');
}

J’ai donc mis tout cela en place et cela fonctionne bien, Opera reçoit désormais mes pages avec le type text/html. Le petit script pour afficher l’adresse source d’un bloc de citation fonctionne… ok, le sélecteur de style fonc… ne fonctionne pas, quoi ?! Bon, ok, on va débogguer tout ça tranquillement. Je fais quelques tests par ci par là pour finir par me rendre que Opera ne connait pas le tableau document.styleSheets !

Non mais c’est quoi ce navigateur de merde ? (Et je pèse mes mots) Même IE 5.01 connait ce tableau ! Bon, récapitulons :

  • DOM inconnu au bataillon si la page est envoyée avec application/xhtml+xml
  • Tableau document.styleSheets non reconnu (reconnu par IE 5.01 qui date de 1999)
  • Bug avec la règle CSS a[hreflang|="en"]:after { content: "\00A0" url("/Icones/en"); } (le texte du lien est remplacé par deux drapeaux)
  • Sélecteur universel non reconnu
  • J’en oublie sùrement d’autres…

Rassurez moi, la version payante dispose d’un moteur moins buggué ? C’est quand même pas cet Opera qui est payant ? => Mozilla ou Firebird en français.

Faille critique dans Internet Explorer

S’il y a bien une faille de sécurité qui devrait convaincre les utilisateurs de IE d’abandonner ce navigateur obsolète, c’est bien celle-là (Ça ne fait pas planter le navigateur et c’est juste une page de tests donc pas de danger en l’occurence). Plus d’infos sur cette faille critique (qui ne sera pas corrigée avant la nouvelle année aux dires de Microsoft).