2009-10-01 9 views
3

Je voudrais demander si Internet Explorer dans QuirksMode a une implémentation JavaScript différente de IE dans un mode normal (quand doctype est correctement défini).QuirksMode & JavaScript Implémentation

Est-il possible qu'un code JavaScript se comporte différemment en QuirksMode et en mode IE normal?

+1

Voulez-vous dire le code Javascript lui-même ou le DOM HTML, ceux-ci sont souvent incorrectement confondus? – AnthonyWJones

Répondre

10

Oui.

L'une des différences les plus notables est que en mode bizarreries, CORPS (document.body) est considéré comme élément racine, alors qu'en mode standard (et la façon dont il est censé être) - élément racine est HTML (document.documentElement).

Cela affecte, par exemple, la façon dont les dimensions de la fenêtre sont généralement calculées; en mode standard, on utiliserait document.documentElement.clientHeight, alors que dans les bizarreries - document.body.clientHeight - pour obtenir la hauteur d'une fenêtre.

Détection ce comportement est facile - document.documentElement.clientHeight == 0 - nous apprendrait que documentElement est pas l'élément racine, et que le corps doit être utilisé à la place.

Et bien sûr, d'autres différences de mode de comportement habituelles, telles que affectant des valeurs CSS sans unité, aboutissent à un résultat différent. Dans les bizarreries, ces valeurs sont traditionnellement attribuées avec succès, alors qu'en mode standard, elles sont ignorées.

+3

Il est probablement utile de souligner que ce sont des différences dans le modèle d'objet de document. L'implémentation JavaScript reste identique, que ce soit en mode quirks, en mode strict ou dans un contexte autre que celui du navigateur. – NickFitz

+0

@NickFlitz Oui, bien sûr. Ce serait bizarre si le mode quirks affectait l'implémentation du langage de base :) (bien qu'avec IE - on ne sait jamais ...) – kangax

3

Il fait certainement dans Internet Explorer 8, où le mode plein de normes ne reçoit plus <a name="foo"> lorsqu'on lui a demandé document.getElementById('foo') et où (IIRC) setAttribute et les amis sont fixés.

+0

ouais complètement oublié les correctifs IE8. bon appel. – geowa4

+3

C'est une différence DOM, pas une différence de JavaScript. – NickFitz

6

JavaScript ne devrait pas se comporter différemment; cependant, les objets DOM sur lesquels JavaScript opère peuvent avoir des comportements différents.