2011-11-07 15 views
9

我对complete属性的理解遇到了一些问题。图像元素的“完整”属性到底有多精确?

我假设complete将是true如果图像已被正确下载和解码。

MDN says ...

True如果浏览器获取的图像,这是在没有错误地解码的supported image type

所以,我以为,检查图像的complete属性之前其load事件解雇将返回false(图像一直没有获取)。当在jsFiddle中隔离这个时,我在检查script元素内关闭</body>标记之前的属性时不断收到true

我也​​与更改图像的src属性,然后立即检查其属性complete属性。我可以在浏览器中看到complete即使在图像下载之前也会回到true(我正在通过Firebug中的Net面板查看其进度)。

我期待的行为是否正确?有没有一种方法可以让我按照预期工作?

当前正在Firefox 7.0.1中测试。这可能是一个Firefox错误,但只有这个other question作为证据。

+0

我发现这个:https://bugs.webkit.org/show_bug.cgi?id=28832提交给Safari的bug报告 - 你在测试它吗?您的演示至少会在Chrome 15上产生预期的“错误,错误,真实”。 – Ryan

+0

@minitech:我正在测试Firefox 7. – alex

回答

2

我已经得到了答案,但你不会喜欢它...

当有问题的图像与document.createElement创建,它的工作原理。见http://jsfiddle.net/minitech/nmuQ8/

我发现,这个工程在创建一个测试,看看它是否工作,所以到目前为止,我没有办法告诉如果更换实际上是必要的,很遗憾。

+0

+1作品,很有意思。我可能会出去看看是否有更好的解决方案:) – alex

8

w3c-docs

的IDL属性完整必须返回true,如果任一下列条件 为真:省略

  • src属性。
  • src属性的值是空字符串。
  • 一旦资源被提取,网络任务源排队的最终任务已排入队列,但尚未运行,且img元素未处于中断状态。
  • img元素是完全可用的。

听起来像结果是正确的。 假设初始图像被缓存,那么图像已经被获取。
当您更改src(队列中的另一任务)

我打得周围一点点,它看起来好像你得到预期的结果,当你删除它SRC-不必完整的属性有什么影响属性设置新的src之前。演示:http://jsfiddle.net/doktormolle/UNEF7/

说明:当没有SRC-属性存在的图像的状态变为“断”(第3条件将不再匹配),它会不完整的新的ressource已经加载前。

+0

+1谢谢,有用的信息。 – alex

+0

+1链接到W3C规范。请注意,您链接的W3C规范目前是草稿,因此它仍在变化。结果我猜,你提到的第三点现在是“只是”说“一旦资源被提取,网络任务源排队的最后一项任务就排队了。”现在有一个额外的观点说'img元素坏了'' –

+1

顺便说一句,有人可以从spec中解释句子吗?“一旦资源被取出,网络任务源排队的最终任务已经排队了。 –