Document.write est-il actuellement obsolète?

J'ai vu un peu de bavardage sur document.write étant obsolète, mais je ne sais pas exactement d'où provient cette information. Je l'ai cherché dans MDN , mais il n'y avait aucune notation à propos de ce qu'il était obsolète … alors, maintenant, je suis un peu méfiant. Google n'a pas été beaucoup d'aide, malheureusement (peut-être que je n'utilisais pas les bons termes de recherche).

Si cela est en effet obsolète, quelqu'un peut-il me lier aux documents appropriés, en montrant qu'il est en effet obsolète?

Non. Il est le plus souvent considéré comme une mauvaise pratique et presque aussi mal utilisé que eval .

Lire: Pourquoi document.write est-il considéré comme une «mauvaise pratique»?

Citant quelques points importants de la question liée ci-dessus:

  • document.write (dorénavant DW) ne fonctionne pas dans XHTML

  • DW exécuté après la fin de la page, le chargement va remplacer la page, ou écrire une nouvelle page, ou ne pas fonctionner

  • DW exécute l'endroit où il se trouve: il ne peut pas s'injecter à un point de nœud donné

Aussi comme @JaredFarrish déclaré, deprecated est surtout un état d'esprit. C'est une relique qui, très probablement, ne disparaîtra jamais, sinon elle casserait de nombreux sites – même le code traditionnel de Google Analytics utilise DW.

De toute évidence, il a été remplacé depuis longtemps par des méthodes de manipulation DOM appropriées et en citant la question liée ci-dessus: DW is effectively writing serialised text which is not the way the DOM works conceptually .


Pour contrebalancer, voici une liste d'où DW peut être considéré comme approprié:

  • Il n'y a rien de mal avec DW, en soi – il ne détruira pas votre page si vous l'utilisez de manière appropriée;
  • Il permet de reculer facilement un script externe sur une copie locale, par exemple lorsque le chargement de jQuery à partir d'un CDN échoue:

     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/libs/jquery-1.8.2.min.js">\x3C/script>');</script> 
  • C'est l'une des façons les plus faciles d'insérer des extraits externes dans votre page tout en conservant le code court (p. Ex. Analyse). Notez que des systèmes tels que Google Analytics favorisent maintenant la méthode asynchrone: créer un élément de script via l'API document.createElement , définir ses propriétés et l'ajouter au DOM – plutôt que d'utiliser sa méthode traditionnelle document.write .

Td dr:
DW est facilement mal utilisé, donc pour une utilisation dans le monde réel, préfère une méthode de manipulation DOM appropriée chaque fois que cela est viable.

Quand document.write est OK?

Il existe de nombreux endroits où les programmeurs sont encouragés à éviter document.write (même la spécification HTML5 lui donne une gêne robuste), ce qui est une bonne chose car c'est l'une de ces choses plutôt clunky qui a été introduit au tout début des scripts Web qui était Jamais standardisé ou même spécifié et il a été remplacé par d'autres méthodes.

Cependant, il existe encore au moins un cas où il pourrait être considéré comme utile.

Agents utilisateurs qui ne prennent pas en charge les scripts

Beaucoup de pages Web ont des centaines de kb de scripts, principalement parce que les développeurs ne font que déposer de bibliothèques et de plugins sans tenir compte de la taille de la page, car cela permet d'économiser quelques heures de temps de développement et les développeurs considèrent leur temps plus important que celui de leur client ou de leurs visiteurs.

Les navigateurs ne téléchargent généralement pas les scripts si le script est désactivé ou n'est pas disponible, mais certains peuvent. L'utilisation du script pour insérer des scripts signifie que si les scripts ne sont pas disponibles, les éléments du script ne sont jamais placés dans le document et les ressources connexes ne sont jamais téléchargées.

document.write est un moyen très simple de mettre en œuvre un script loader. Bien sûr, il existe des chargeurs de script beaucoup plus sophistiqués pour faire la même chose, mais bon vieux document.write est mort, fonctionne partout et, à cette fin, fait le travail superbement avec la même facilité que innerHTML.

Et étant donné l'utilisation généralisée de innerHTML (et même des extraits de balisage comme méthode de création d'éléments à l'aide de méthodes DOM), il semble raisonnable d'utiliser un outil similaire pour l'insertion de scripts.

Où l'insertion à l'aide de innerHTML ne fonctionne pas

C'est presque le même que celui ci-dessus, mais un peu différent.

Les éléments de script insérés à l'aide de innerHTML ne sont pas exécutés, donc si le flux de document est ouvert, il est assez banal d'utiliser document.write au lieu de innerHTML. Cependant, la mise en garde habituelle s'applique, en utilisant document.write après le chargement du document, enlever le document actuel, ce qui n'est pas toujours (erreur, presque jamais) souhaitable.

Fenêtres contextuelles

Ok, tout le monde déteste les pop-ups et les associe à document.write semble être le pire des pires des pires. Mais parfois, un simple pop-up avec un contenu écrit par document.write est plus simple et plus rapide (à la fois pour développer et présenter) que des dialogues plus sophistiqués.

L'excuse XHTML

document.write ne fonctionne pas dans des documents non-HTML (par exemple XML). Mais bien que de nombreuses pages sur le Web possèdent un DOCTYPE XHTML (peut-être parce que les CMS préfèrent le XML au HTML), les pages sont presque toujours utilisées comme texte / HTML, de sorte que le navigateur les traite. Il est extrêmement improbable que le Web passe à XML (c.-à-d. Les documents effectivement servis comme XML) à tout moment. Pour les pages Web, le DOCTYPE est essentiellement un drapeau utilisé par le navigateur pour fonctionner s'il doit être en mode standard ou non, de sorte que le contenu XML est un peu un Phurphy.

Cependant, la conclusion est que document.write devrait presque jamais être utilisé "dans le monde réel" car les méthodes DOM fournissent une alternative standardisée, ont un comportement bien spécifié et sont presque universellement pris en charge. document.write est plus ou moins équivalent à eval en ce qu'il existe des cas rares où il est utile, mais il existe presque toujours une meilleure façon de faire les choses.