Question

Je développe une plate-forme pour le développement d'applications de bureau avec des technologies web. Au cours de le faire, je l'ai essayé d'obtenir un document / sur-prêt à travailler avec les fonctionnalités du navigateur, je vais intégrer dans la plate-forme. Voilà pourquoi je avais déjà posé ici cette question sur le SO: javascript-cadre qui-avant-offre-tout-document onReady fonctionnalité

Cependant, je ne l'ai pas été en mesure d'obtenir mon navigateur de choix (Chut, est un secret) d'utiliser avec succès la fonctionnalité proposée par la seule et unique réponse à ce qui précède. Ainsi, au cours de simplement essayer de comprendre ce qui pourrait éventuellement travailler je suis tombé sur ce qui suit.

Le code ci-dessous a le même effet dans ce navigateur que je utilise simplement en exécutant une fonction après un délai d'attente de 1 milliseconde: Je peux écrire au DOM tandis que la grande image est en cours de chargement. Cela pourrait ne pas être la solution ultime pour moi, je peux écrire quelque chose de spécifique à la façon dont les fonctionnalités DOM est mis en œuvre par le moteur Javascript pour ce navigateur.

Cependant, j'ai décidé de voir si cela fonctionne dans les navigateurs standards, et à ma grande surprise, il le fait! À la lumière de ce qui, ma question: sont différentes implémentations de fonctionnalité dom / préparation fournies par divers cadres Javascript, simplement surpuissant

?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
setTimeout(function() {
    var txtNode = document.createTextNode("ready_yet?");
    var ready_yet_el = document.getElementById("ready_yet");
    ready_yet_el.appendChild(txtNode);
},1);
</script>
</head>

<body>
<div id="ready_yet"></div>
<img src="http://www.ryanmorr.com/tests/ondomready/pic.jpg" />
</body>

</html>

EDIT / AUTRES PENSEES Le la page liée par la réponse à ma précédente question connexe il est dit " pour Firefox et Opera une simple vérification du type d'événement déterminera si elle est DOMContentLoaded. Safari et IE vérifieront contre l'état prêt du document .... Enfin dans le cas où tout le reste échoue, l'événement onload apportera l'arrière « . Peut-être un setInterval semblable à mon setTimeout pourrait être au-dessus l'avant-dernier cours de l'action, avant de se fonder sur onload en dernier recours? En tout état de cause, avec le navigateur intégrable j'ai choisi, ni l'événement DOMContentLoaded, ni document.readyState semblent être pris en charge.

Était-ce utile?

La solution

Votre intuition est bonne et bien-fondé de l'OMI. Mais quelqu'un vous a battu au poinçon déjà . Réponse courte est que setTimeout est pas une implémentation fonctionnelle de détecter la préparation DOM dans tous les cas. Il peut être ok pour votre navigateur d'intérêt, mais IE échoue dans certaines situations.

Il peut vous intéresser de savoir que le framework ASP.NET AJAX propre de Microsoft utilise l'astuce setTimeout pour détecter la préparation DOM. Et surprise, surprise: échoue dans certains cas d'utilisation ainsi .

En bref, le problème semble se situer dans IE avec des scripts de chargement lent, que ce soit en raison de la grande taille de fichier (par exemple ~ 500K) ou d'un réseau / latence du serveur.

Autres conseils

Non, parce que quand les bugs « de » impréparation manifeste DOM ils le font dans incroyablement rare et difficile à prévoir et traquer les moyens -. Chacun (bien sûr) uniques au navigateur qu'il se passe dans

Il est beaucoup plus facile d'éviter que ces problèmes tout à fait et je sais que vous allez toujours avoir affaire à un prêt DOM.

À titre d'exemple, il y a un moment j'ai eu un DOM bug pas prêt dans le navigateur préféré de tout le monde que se manifeste en travaillant parfaitement 99% du temps, mais il est mort avec des erreurs si le contenu de la page a un élément img avec l'attribut src dans ce Et si le contenu a également un élément ul avec un nombre quelconque de Li à l'intérieur de ... il n'a pas bug si aucune de ces choses ne sont pas vraies.

Il est facile pour moi de dire maintenant « oh il était un problème DOM », mais à l'époque ... non, pas si facile.

Il suffit, non. Quelqu'un avec une connexion plus lente et plusieurs fichiers à charger ne vont pas apprécier leur navigateur en essayant d'exécuter des scripts sur des éléments qui n'existent pas encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top