readyState是如何工作的?

问题描述:

我使用RFT(Rational Functional Tester)检查BrowserTestObject的属性.readyStatereadyState是如何工作的?

有时候在测试脚本的下一步之前,我需要确保页面已经准备就绪,并且所有的对象都被加载了。

.readyState == 4是否意味着浏览器内的所有对象都已加载并准备就绪?在任何阿贾克斯呼叫在后台仍然“工作”或它必须完成之前浏览器返回.readyState=4?柔性应用程序怎么样?

行为浏览器是独立的还是不是真的?我在IE 8之后(和firefox 3.6.x)

如果浏览器实现正确,快速回答为YES。

在这里看到:http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#current-document-readiness

+0

在IE 8和firefox 3.6.x中正确实现了吗? – Radek 2012-02-29 00:19:26

+2

@Radek,根据http://msdn.microsoft.com/en-us/library/ms535874(v=vs.85).aspx,IE8有一个错误的实现。 FF 3.6支持它,因为该错误已修复https://bugzilla.mozilla.org/show_bug.cgi?id=347174。 – 2012-02-29 00:27:20

+0

你的意思是哪个错误? – Radek 2012-02-29 00:32:19

我会说不。如果我理解here的讨论,readyState因此只能用于测试javascript,没有别的。要等待文档本身加载,您需要连接到document.readyState并等待它变为"complete"。在这种情况下,一旦HTML解析完成,document.readyState将是"complete"一劳永逸,并且不会受到任何XMLHttpRequest的影响。 Flash插件可以或不可以启动;大多数肯定会有很多的JavaScript运行;例如$(function() {})在jquery中的构造常常意味着JavaScript代码只有在浏览器达到“完成”状态后才能开始执行。

要测试是否有任何异步请求正在进行,我建议以某种方式挂接所有XMLHttpRequests的readyState事件并使其更新全局变量。