Coup de gueule : le prétendu Acid3 test, fait par Google....

De quoi me mettre en rogne : un test Acid3, qui - on l'aura déjà deviné - met complètement Internet Explorer hors course...

Alors bien sûr, on se consolera en se disant que même FireFox échoue très lamentablement à ce test, mais ca ne me suffit pas... J'ai décidé de regarde comment notre test fait échoué IE, ainsi que les autres navigateurs modernes, pourtant maintenants fort de l'Acid Test 2.

EDIT : Apple et sa vision d'Acid Test 3

Comment foutre tous les navigateurs dedans, et IE en particulier

*** Premier élément de réponse : jouer sur des détails (enfin ca c'était déjà Acid2)

*** Deuxième chose : utiliser tout ce qu'IE n'a pas. Ne jamais utiliser ce qu'IE a.

*** Troisième chose : Empecher IE de faire les tests en le faisant buter sur des futilités (IE n'effectue en fait aucun test après le 40e - il en rate deux avant 29 en n'en rate plus aucun après le 29. En tout il totalise 13 points. 29 + 13 - 2 = 40)

*** 4e chose : Utiliser un test qui déstabilise le navigateur, au point de causer des anomalies étonnantes :

Strangely, loading the test in a background tab in Firefox 3 (2008012704) gives me 58, whereas loading in the foreground gives me 60.
Also, on random occasions, I get 61 instead.

Ce n'est pas le seul témoignage. Des utilisateurs de FireFox obtiennent 51, d'autre disent avoir 57, ...

Konqueror 3.5.8 on latest Ubuntu Linux 7.10 loads the page, then crashes after a split second

En gros, ca ressemble un peu à rien ce test...

REM : Je ne veux pas faire croire que je suis pro-IE (même si cela a peut-être un fond de vérité, car j'ai toujours trouvé malhonnête d'accuser IE de ne pas respecter des standards qu'on a créé très différent de l'implémentation DEJA EXISTANTE d'IE du HTML/CSS/JavaScript) mais je vais démontrer ici que ce test, loin d'avoir été fait pour le respect des standards, a surtout été conçu pour discréditer IE.

Le protocol data

Inutile en soit. Comme par hasard présent à de nombreuses reprises dans le test.

Le sélecteur :root

Si vous n'avez plus envie de taper HTML { ... }, pourquoi ne pas taper :root { ... } ?

Font-Face

Trop dur de taper url(font.ttf) ? On a pensé à vous :

@font-face { font-family: "AcidAhemTest"; src: url(font.ttf); }

* { font: AcidAhemTest; }

Opacity

Non content de montrer qu'IE ne gère pas l'opacité via opacity mais bien via filter, on s'arrange aussi pour que la DIV censée disparaitre via opacity soit grande et très mal placée :

.removed { position: absolute; top: 80px; left: 380px; height: 100px; width: 100px; opacity: 0; }

Ne pas faire confiance à celui qui tape son code HTML

<link rel="stylesheet" href="empty.css">

<!-- text/html file (should be ignored, <h1> will go red if it isn't) -->

C'est pareil pour de nombreux test.

On fait passez un script pour un PNG, et on regarde si il se lance.

On refait le même essai mais avec un document HTML.

Créer un document, supprimer head et body, puis les recréer.

De préférence en larguant IE dès la première ligne : doc = iframe.contentDocument;

Ce code est utilisé à chaque fois qu'on tente de tester les manipulations du DOM du navigateur.

Faire foirer IE à tous les tests CSS

doc.defaultView.getComputedStyle, sans aucun appel à currentStyle (variante IE qui me semble en plus bien plus simple que son cousin FireFox)

Demander de garder des TextNode vide (ou remplis d'espace)

var penultimate = last.previousSibling; // this should be the whitespace node
penultimate = penultimate.previousSibling; // this should now be the actual penultimate element

 

Utiliser des fonctions inconnues

doc.createNodeIterator; doc.createTreeWalker

Appeler les propriétés comme des méthodes

w.lastChild()

Très courrant et surtout non-supporté par IE.

Document.getElementById searched on name

Très très grave bug d'IE et d'opéra, en effet....

Test sur les DOM Range

Implémentation W3C du ControlRange d'IE, lors d'une sélection. Aucune chance pour IE de réussir vu que la manière dont cela est géré est radicalement différente.

IE ne sait même pas en créer une (document.createRange)

Tromper le appels vers le C++ avec des chaines contentant \0

document.getElementById('bucket1\0error')

Utiliser les features d'IE et les considérer comme un bug

document.createElement('<div>');

document.implementation.createDocumentType

Rien à dire si ce n'est qu'IE utilise évidemment les ActiveX.

Changer le type des inputs dynamiquement

input.type="password"

Empecher de joindre une propriété et un attribut

test.setAttribute('http-equiv', 'boxes');
assertEquals(test.httpEquiv, 'boxes', "boxes: httpEquiv wrong");

 

Utilisation du SVG

Non supporté par défaut sur IE

Utilisation du seul nom de couleur HTML n'étant pas géré correctement par IE

grey est en effet, selon CSS3.info, le seul nom de couleur du CSS3 à ne pas être supporté par IE

Changer le contenu HTML d'une feuille de style.

Et pas passer par sa propriété cssText. Complètement tordu.

doc.styleSheets[0].ownerNode.firstChild.data = "img { height: 20px; }";

Des trus à propos des events à dormir debout.

Mais je parie que ca passe sous FireFox.

button.onclick = function () { up += 1; if (up < 10) button.click(); down += up; };
button.click();
assertEquals(up, 10, "click event handler called the wrong number of times");
assertEquals(down, 100, "click event handler called in the wrong order");

 

Jouer sur les specs ECMA

// constructor is not DontDelete
var f3 = function (a, b) { 3 };
delete f3.prototype.constructor;
var f3i = new f3();
assertEquals(f3i.constructor, Object.prototype.constructor, "Function object's prototype's constructor was DontDelete (or got magically replaced)");

 

En vrac

var a = []; var s;
s = a.length = "2147483648";
assertEquals(typeof s, "string", "type of |\"2147483648\"| is not string");

<div class="buckets"
><p id="bucket1" class="z"></p
><p id="bucket2" class="z"></p
><p id="bucket3" class="z"></p
><p id="bucket4" class="z"></p
><p id="bucket5" class="z"></p
><p id="bucket6" class="z"></p>
</div>

....

Pour ceux qui veulent se marrer : http://acid3.acidtests.org/

Info relayée de : http://www.css3.info/acid3-completed/

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié 17 février 08 11:04 par FREMYCOMPANY

Commentaires

# coucou747 said on février 17, 2008 23:43:

le debut, ok, mais la fin, t'as quand meme des choses qui "devraient" passser... sous IE comme ailleur !

si tu pouvais lister ce qu'IE a, qui est dans la norme, et que n'ont pas les autres, ca donnerait une image moins brute a ton article, (tu ferais alors une demonstration complete et pas une demie demonstration, car la, si on lit bien ton article, tu listes ce qu'MSIE ne fait pas et qu'il "devrait" faire....)

# galerio said on février 18, 2008 09:23:

Sérieux... c'est le genre de post de personne qui n'aime pas se remettre en cause, ou remettre en cause ce qu'elles trouvent aiment.

Presque tous (je dis 'presque' pour être gentil)les arguments ne tiennent pas la route, entre :

"Et pas passer par sa propriété cssText. Complètement tordu.

doc.styleSheets[0].ownerNode.firstChild.data = "img { height: 20px; }";

Ah oui, c'est vrai, il vaut mieux avoir une seule manière de coder les choses que d'en avoir le choix, j'avais oublier.

Puis :

"** Troisième chose : Empecher IE de faire les tests en le faisant buter sur des futilités"

Euhh... je pense que tu n'as pas compris le but d'AcidTest. Le but, c'est pas faire du "beau et bon" code, mais de tester l'exhaustivité de la compréhension de plusieurs normes web, notamment en écrivant les trucs les plus tordu possible.

Avec ce genre de raisonnement, vaudrait mieux pas que tu travaille dans la sécurité :

"C'est pas possible, ils ont pas le droit, ils ont utiliser une faille pour entrer dans mon système...."

# Mr.Phi said on février 18, 2008 17:42:

Je n'ai encore jamais vu d'article rabaissant ie avec autant d'arguments.

Et je suis tout à fait d'accord, ie est incapable de passer des étapes simples telles que la reconnaissance d'une couleur (o_O) de la transparence ( :/ ), des SVG ( &gt;_&lt; ).

Et évidemment dès que ça se complique un peu il est totalement largué.

Quand on pense qu'il y a encore quelque pro-ms qui donneraient leur âme à un navigateur aussi dépassé ^^ .

Bonne journée.

# FREMYCOMPANY said on février 18, 2008 18:01:

Ecoutez, chacun son avis.

Je conviens que certaines parties de mes remarques sont sans valeur (IE pourrait supporter ces features), mais d'autre le sont beaucoups moins.

*** Selon les SPECS ECMAScript, il n'est pas possible d'appeler une propriété comme une méthode. Donc, déjà ca, c'est contraire aux specs.

*** Ensuite, oui il existe des choses qu'IE fait mieux que FireFox et qui passe les standards :

- getElementsByName ne recherche que sur les éléments pouvants supporter l'attribut name (et c'est ce qui est dans les specs, vu que la propriété name n'est pas définie sur HTMLElement)

- les balises RUBY et les CSS correspondants

- la gestion des CSS inconnus

- IE est le seul navigateur à respecter correctement l'affichage des zIndex (càd que chaque élément HTML en position absolute crée automatiquement un contexte et que tous les éléments en position absolute à l'intérieur de celui-ci seront de prioriété moindre que celle dans une autre DIV en position absolute de zIndex inférieur.

Mais comme par hasard, tout cela n'est pas repris dans les test....

*** Je ne suis pas sûr que le W3C ait prévu que changer le contenu HTML d'une balise STYLE change le style en lui-même. Prenez une balise SCRIPT, changez son innerHTML et regardez si ca marche ou pas... Ben une balise STYLE c'est pareil : c'est parsé à la lecture du document, puis indépendantisé de la feuille de style générée. Ce pourquoi on a crée la propriété cssText.

# coucou747 said on février 18, 2008 19:29:

changer le contenu d'une balise style, c'est un truc qui me paraissait naturel quand je voulais faire du multi style...

Les commentaires anonymes sont désactivés

About FREMYCOMPANY

François REMY est un jeune développeur belge plein d'entrain qui traite surtout des technologies du web et de DotNet dans ses articles.


Les 10 derniers blogs postés

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le il y a 15 heures et 23 minutes

- Y'a des erreurs qui peuvent rendre le développeur violent par Aleks's Blog le 02-02-2012, 16:33

- [Hyper-V 3] Présentation des commandlets PowerShell par Blog de SPBrouillet (Pierrick BROUILLET) le 01-31-2012, 16:01

- IIS7 – Compression GZIP par Atteint de JavaScriptite Aiguë [Cyril Durand] le 01-31-2012, 15:52

- SharePoint 15 Technical Preview Managed Object Model Software Development Kit par Matthew le 01-31-2012, 12:34

- Office 15 Technical Preview - Open specification Update par Matthew le 01-31-2012, 10:14

- TFS Integration Tools – Installation par Vivien Fabing le 01-31-2012, 00:06

- Test par RonnyK le 01-30-2012, 16:56

- [SharePoint 2010] Désactiver le correcteur orthographique dans les pages d’un site de publication par Jean-Christophe Brabant le 01-30-2012, 09:30

- [SharePoint 2010] Site internet et performances : poids et nombre des ressources par Arnault Nouvel le 01-30-2012, 00:52




Search

Go

Ce blog

Abonnements