Ce document décrit comment Mozilla utilise la déclaration DOCTYPE pour choisir entre le mode strict et le mode dégradé quirks. Le code qui permet cette détermination est la fonction DetermineParseMode() dans nsParser.cpp. Consultez le bug 1312 et le bug 55264 pour plus d'informations sur l'histoire de cette détermination. Consultez le bug 153032 pour la création du mode « presque standard » depuis Mozilla 1.0. L'objectif recherché pour ce comportement a été le suivant :
- la plupart des pages
text/html
existantes sur le Web qui ont besoin d'un mode dégradé pour s'afficher correctement doivent être affichées avec le mode quirks ( presque toutes, plutôt que toutes, pour répondre également aux points suivants). - Les auteurs de pages Web écrivant selon les standards en vigueur doivent pouvoir basculer vers le mode strict.
- Les pages écrites en utilisant n'importe quel identifiant public dans leur déclaration DOCTYPE qui apparaîtront dans l'avenir doivent s'afficher en mode strict.
En d'autres termes, l'algorithme est la meilleure approximation que nous ayons trouvée pour déterminer quelles pages ont été écrites après que Mozilla ne devienne un navigateur important sur le Web.
Mode standard complet
Les lignes suivantes déclenchent le mode standard complet :
- Tous les documents avec un type MIME XML tel que
text/xml
,application/xml
, ouapplication/xhtml+xml
(puisque le sniffing n'a lieu que pour les documents text/html). - Tous les documents "DOCTYPE HTML SYSTEM" par opposition au "DOCTYPE HTML PUBLIC", à l'exception des doctypes IBM notés plus bas.
- Une déclaration DOCTYPE sans DTD, c'est-à-dire <!DOCTYPE HTML>.
- Une déclaration DOCTYPE avec un sous-ensemble interne.
- Tout doctype inconnu, ce qui veut dire aussi les doctypes (techniquement connus) suivants :
- L'identificateur public "-//W3C//DTD HTML 4.01//EN".
- L'identificateur public "-//W3C//DTD HTML 4.0//EN".
- L'identificateur public "-//W3C//DTD XHTML 1.0 Strict//EN".
- L'identificateur public "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN".
- L'identificateur public "ISO/IEC 15445:2000//DTD HTML//EN".
- L'identificateur public "-//IETF//DTD HTML i18n//EN".
Mode presque standard
Les lignes suivantes déclenchent le mode presque standard. Le mode presque standard a été créé après les versions 1.0 et 1.1alpha de Mozilla, mais avant les versions 1.0.1 et 1.1beta. Avant la création de ce mode, ces doctypes permettaient de basculer en mode standard complet.
- L'identificateur public "-//W3C//DTD XHTML 1.0 Transitional//EN".
- L'identificateur public "-//W3C//DTD XHTML 1.0 Frameset//EN".
- L'identificateur public "-//W3C//DTD HTML 4.01 Transitional//EN", avec un identificateur système.
- L'identificateur public "-//W3C//DTD HTML 4.01 Frameset//EN", avec un identificateur système.
Mode dégradé quirks
Les lignes suivantes déclenchent le mode quirks (cette liste doit être complète afin que les pages existantes sur le Web basculent en mode quirks) :
Les sites suivants ont été utiles pour préparer cette liste : W3C HTML Validator, HTMLHelp HTML Validator.
- L'absence de DOCTYPE.
- Une déclaration XML (pseudo-PI) sans doctype (en d'autres termes, ignorer la déclaration XML et utiliser le DOCTYPE). Avant les versions 1.0 et 1.1alpha (mais pas 1.0.1 et 1.1beta), la présence d'une déclaration XML déclenchait le mode standard complet.
- Une déclaration DOCTYPE qui ne peut pas être comprise (par ex. qui ne correspond à rien).
- L'identificateur public "https://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" (avant 1.5b et 1.4.2, il déclenchait le mode quasi standard).
- L'identificateur public "-//W3C//DTD HTML 4.01 Transitional//EN", sans identificateur système.
- L'identificateur public "-//W3C//DTD HTML 4.01 Frameset//EN", sans identificateur système.
- L'identificateur public "-//W3C//DTD HTML 4.0 Transitional//EN" (voir également ce test avec un identificateur système).
- L'identificateur public "-//W3C//DTD HTML 4.0 Frameset//EN" (voir également ce test avec un identificateur système).
- L'identificateur public "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN".
- L'identificateur public "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//EN".
- L'identificateur public "-//IETF//DTD HTML//EN//3.0".
- L'identificateur public "-//W3O//DTD W3 HTML 3.0//EN//".
- L'identificateur public "-//W3O//DTD W3 HTML 3.0//EN".
- L'identificateur public "-//W3C//DTD HTML 3 1995-03-24//EN".
- L'identificateur public "-//IETF//DTD HTML 3.0//EN".
- L'identificateur public "-//IETF//DTD HTML 3.0//EN//".
- L'identificateur public "-//IETF//DTD HTML 3//EN".
- L'identificateur public "-//IETF//DTD HTML Level 3//EN".
- L'identificateur public "-//IETF//DTD HTML Level 3//EN//3.0".
- L'identificateur public "-//IETF//DTD HTML 3.2//EN".
- L'identificateur public "-//AS//DTD HTML 3.0 asWedit + extensions//EN".
- L'identificateur public "-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//EN".
- L'identificateur public "-//IETF//DTD HTML Strict//EN//3.0".
- L'identificateur public "-//W3O//DTD W3 HTML Strict 3.0//EN//".
- L'identificateur public "-//IETF//DTD HTML Strict Level 3//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 3//EN//3.0".
- L'identificateur public "HTML".
- L'identificateur public "-//IETF//DTD HTML//EN".
- L'identificateur public "-//IETF//DTD HTML//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML 2.0//EN".
- L'identificateur public "-//IETF//DTD HTML Level 2//EN".
- L'identificateur public "-//IETF//DTD HTML Level 2//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML 2.0 Level 2//EN".
- L'identificateur public "-//IETF//DTD HTML Level 1//EN".
- L'identificateur public "-//IETF//DTD HTML Level 1//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML 2.0 Level 1//EN".
- L'identificateur public "-//IETF//DTD HTML Level 0//EN".
- L'identificateur public "-//IETF//DTD HTML Level 0//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML Strict//EN".
- L'identificateur public "-//IETF//DTD HTML Strict//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML Strict Level 2//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 2//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML 2.0 Strict//EN".
- L'identificateur public "-//IETF//DTD HTML 2.0 Strict Level 2//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 1//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 1//EN//2.0".
- L'identificateur public "-//IETF//DTD HTML 2.0 Strict Level 1//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 0//EN".
- L'identificateur public "-//IETF//DTD HTML Strict Level 0//EN//2.0".
- L'identificateur public "-//WebTechs//DTD Mozilla HTML//EN".
- L'identificateur public "-//WebTechs//DTD Mozilla HTML 2.0//EN".
- L'identificateur public "-//Netscape Comm. Corp.//DTD HTML//EN".
- L'identificateur public "-//Netscape Comm. Corp.//DTD HTML//EN".
- L'identificateur public "-//Netscape Comm. Corp.//DTD Strict HTML//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 2.0 HTML//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 2.0 Tables//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 3.0 HTML//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//EN".
- L'identificateur public "-//Microsoft//DTD Internet Explorer 3.0 Tables//EN".
- L'identificateur public "-//Sun Microsystems Corp.//DTD HotJava HTML//EN".
- L'identificateur public "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//EN".
- L'identificateur public "-//IETF//DTD HTML 2.1E//EN".
- L'identificateur public "-//O'Reilly and Associates//DTD HTML Extended 1.0//EN".
- L'identificateur public "-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//EN".
- L'identificateur public "-//O'Reilly and Associates//DTD HTML 2.0//EN".
- L'identificateur public "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN".
- L'identificateur public "-//Spyglass//DTD HTML 2.0 Extended//EN".
- L'identificateur public "+//Silmaril//DTD HTML Pro v0r11 19970101//EN".
- L'identificateur public "-//W3C//DTD HTML Experimental 19960712//EN".
- L'identificateur public "-//W3C//DTD HTML 3.2//EN".
- L'identificateur public "-//W3C//DTD HTML 3.2 Final//EN".
- L'identificateur public "-//W3C//DTD HTML 3.2 Draft//EN".
- L'identificateur public "-//W3C//DTD HTML Experimental 970421//EN".
- L'identificateur public "-//W3C//DTD HTML 3.2S Draft//EN".
- L'identificateur public "-//W3C//DTD W3 HTML//EN".
- L'identificateur public "-//Metrius//DTD Metrius Presentational//EN".
Notez que toutes les comparaisons d'identificateurs publics sont insensibles à la casse, à cause du nombre important de pages qui utilisent des identificateurs ayant une casse incorrecte (ce qui est techniquement incorrect puisque les chaînes de caractères sont sensibles à la casse).
Voir aussi
Informations sur le document original
- Auteur(s) : David Baron
- Dernière mise à jour : 2 août 2005
- Copyright : Copyright © David Baron