Window.document est-il toujours nul ou indéfini?

J'ai fait des recherches sur l'objet window.document afin de m'assurer que l'une de mes solutions JavaScript est fiable. Existe-t-il un cas où l'objet window.document est nul ou indéfini?

Pour discuter, voici un exemple de code non pertinent. Y a-t-il des situations dans lesquelles ce code échouera (aka, lance une exception)?

$(document).ready(function() { var PageLoaded = (window.document.readyState === "complete"); }); 

Existe-t-il un cas où l'objet window.document est nul ou indéfini?

Oui, pour le code JavaScript qui n'est pas dans un document (par exemple, node.js). Mais un tel code peut ne pas avoir un objet de fenêtre non plus (bien qu'il ait un objet global).

Pour le code dans les documents HTML dans les agents utilisateurs conformes au W3C DOM, no.

 > Are there any situations in which this piece of code will fail (ie throw > an exception)? > > [snip jQuery code] 

Il échouera où:

  1. La fonction jQuery ready échoue (probablement dans au moins certains navigateurs, mais pas ceux utilisés pour le bureau et certains appareils mobiles)
  2. Il n'y a pas d' window object , ou
  3. Il n'y a pas d'objet window.document

Pour avoir confiance en un code fonctionnant dans une variété d'hôtes, vous pouvez faire quelque chose comme:

  if (typeof window != 'undefined' && window.document && window.document.readyState == whatever) { // do stuff } 

Ce qui n'est pas beaucoup supplémentaire à écrire, et il est probable que cela ne soit nécessaire qu'une seule fois.

Alternatives:

 (function (global) { var window = global; if (window.document && window.document.readyState == whatever) { // do stuff } }(this)); 

et

 (function (global) { var window = global; function checkState() { if (window.document && window.document.readyState) { alert(window.document.readyState); } else { // analyse environment } } // trivial use for demonstration checkState(); setTimeout(checkState, 1000); }(this)); 

Je pense que le document est toujours défini, car tout ce navigateur montre que vous êtes un document html, même le site is not available . De plus, le document est lisiblement propriété

 window.document = null; console.log(window.document); //Document some.html# 

En ignorant le fait que Javascript exécute d'autres endroits en plus des navigateurs web / agents utilisateurs, votre test de pageLoué peut échouer sur les iframes (non testé, mais je sais qu'ils sont bizarres).

Il peut également y avoir une question sur ce que signifie "page chargée". Essayez-vous de voir si le DOM a été rendu et que les éléments sont prêts à être manipulés? Ou vérifiez-vous si le chargement de la page est bien terminé, ce qui inclut tous les autres éléments, tels que les graphiques, également chargés.

Cette discussion peut être utile: comment vérifier si DOM est prêt sans cadre?

Parce que votre code javascript doit être écrit dans un document html, afin que votre code ne puisse pas être exécuté à partir du document, en d'autres termes, aucun document, aucun javascript.