正在检查DOM矫枉过正的准备?(Is checking for the readiness of t

2019-07-04 21:52发布

我正在开发用于开发与网络技术的桌面应用程序的平台。 在这样做的过程中我一直在试图获得一些文件/上就绪功能与我会被整合到平台上的浏览器工作。 这就是为什么我会在这里以前问过这个这个问题上的SO: JavaScript的框架-即,主要-提供-刚刚文档onready的功能

不过,我已经无法让我的浏览器选择(嘘,其秘密;)成功地利用由一个建议的功能,并回答只有上述内容。 所以,在只是试图找出有可能会工作,我在下面跌跌撞撞的过程。

下面的代码有这个浏览器我用仅仅通过1毫秒的超时后执行函数中相同的效果:我可以写信给DOM而大图像加载。 这可能不是我的最终解决方案,我可以写具体要怎么DOM功能是由JavaScript引擎在此浏览器实现的东西。

不过,我决定看看这个工作在标准的浏览器,而令我惊讶的是,它确实! 在其中光我的问题,:是的DOM /就绪功能的各种实现各种JavaScript框架,只需提供矫枉过正?

<!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>

编辑/进一步思考的答案我以前的相关问题,链接到网页它指出:“对于Firefox和Opera的事件类型的简单检查将确定它是否是DOMContentLoaded。Safari和IE将检查对文档的准备状态...在。最后所有的情况下都失败,onload事件将殿后“。 也许setInterval的类似我的setTimeout上面可以是一个行动的倒数第二个过程中,依靠的onload作为最后手段之前? 在任何情况下,与嵌入浏览器我选择,无论是DOMContentLoaded事件,也不document.readyState似乎支持。

Answer 1:

你的预感是好的,以及IMO成立。 但是, 有人打你一记重拳已经 。 简短的回答是, setTimeout 不是检测在所有情况下DOM准备工作落实。 这可能是确定为您所关注的浏览器,但IE浏览器在某些情况下会失败。

它可能感兴趣你知道,微软自己的ASP.NET AJAX框架使用setTimeout伎俩,以检测DOM准备。 和惊喜,惊喜: 它在某些使用情况也将失败 。

总之,这个问题似乎在于IE与缓慢加载脚本,无论是由于大的文件大小(例如〜500K)或网络/服务器延迟。



Answer 2:

没有,因为当DOM“还未准备”错误清单他们令人难以置信的不寻常,很难做到预测和跟踪的方式 - 每一个(当然)独特的,它发生在浏览器中。

这是很容易,只是避免这些问题完全,知道你总是将要处理的是一个准备好DOM。

作为一个例子,前一段时间,我在大家的喜爱的浏览器比工作的时间完美99%表现出来的DOM没有准备好错误,但有错误死亡,如果页面含量与src属性img元素在里面,并且如果内容还与任意数量的李鸿章的UI元素在中...它没有错误,如果任何这些东西是不正确的。

这是容易的,我现在说“噢,这是一个DOM的问题”,但在当时......不,不是那么容易的。



Answer 3:

简单地说,没有。 有人用较慢的连接和多个文件加载不欣赏他们的浏览器试图运行上还不存在的元素的脚本。



文章来源: Is checking for the readiness of the DOM overkill?