图像元素的“完整”属性究竟是如何工作的?

时间:2011-11-07 01:32:35

标签: javascript html5 dom

我对complete属性的理解遇到了一些问题。

如果图片已正确下载并解码,我认为completetrue

MDN says ...

  

如果浏览器已经提取了图像,则为真,并且它位于supported image type中,并且没有错误地解码。

因此,我假设在complete事件被触发之前检查图像的load属性将返回false(图像未被获取)。在jsFiddle中隔离此内容时,在结束true标记之前检查script元素内的属性时,我一直收到</body>

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

我期待的行为是否正确?有没有办法像我期望的那样让它发挥作用?

目前正在使用Firefox 7.0.1进行测试。这可能是一个Firefox错误,但只有other question作为证据。

2 个答案:

答案 0 :(得分:8)

来自w3c-docs

  

如果满足以下任何条件,则IDL属性complete必须返回true   条件是真的:

     
      
  • 省略src属性。
  •   
  • src属性的值为空字符串。
  •   
  • 一旦获取资源,网络任务源排队的最终任务已排队,但尚未排队   运行,并且img元素未处于损坏状态。
  •   
  • img元素完全可用。
  •   

听起来结果是正确的。 假设高速缓存初始图像,则已经获取了图像 当您更改src(排队另一个任务)

时,它对complete-property没有任何影响

我玩了一下,当你在设置新的src之前删除src属性时,看起来好像得到了预期的结果。演示:http://jsfiddle.net/doktormolle/UNEF7/

说明:当没有src属性存在时,图像的状态变为“已损坏”(第三个条件将不再匹配)并且在新的资源已经完成之前它将不会完成加载。

答案 1 :(得分:2)

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

当使用document.createElement创建相关图片时,它可以正常工作。见http://jsfiddle.net/minitech/nmuQ8/

我发现在创建测试以查看是否工作时这是有效的,所以到目前为止,我还没有办法判断替换是否真的是必要的,不幸的是。 / p>