document.onload 完全破解

Dean Edwards 研究 document.onload 的缺點與及解決方法已經一段時間,現在他終於提出了一個跨瀏覽器而又簡潔的終極解決方案

事情的原委是這樣的:很多開發人員使用 document.onload 來啟動 JavaScript 進行一些網頁效果的初始化工作,例如動畫菜單、Ajax 應用程式等,但是 document.onload 只有當網頁的所有內容,包括圖像、JavaScript、動畫、影音檔等全部下載後才會被觸發,倘若這些檔案容量很大,或者儲存在一個不受你操控的伺服器 上,網頁上的效果很可能被延遲啟動,甚至完全不能啟動。

這就是 Dean Edwards 希望解決的問題。

他早在 2005 年 9 月已經基本上找到了 Mozilla 和 IE6 上的解決方法,Mozilla 的解決方法是使用一個即使在 Mozilla 網站亦沒有詳細解說的 DOMContentLoaded 事件,IE6 則需要使用兩個 Miscrosoft 的自訂規格 deferconditional comment,可惜這個方案有兩個缺點:

  1. 在 IE6 它必須使用外部 JavaScript 檔
  2. 它沒有解決 Opera 和 Safari 的問題

現在 Dean Edwards 終於為 Opera 和 Safari 找到了解決方案,而且在 IE6 也有了無需使用外部 JavaScript 檔的方法,所有問題正式畫上句號。