2011-11-07 17 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中解釋句子嗎?「一旦資源被取出,網絡任務源排隊的最終任務已經排隊了。 –