隨筆-57  評論-129  文章-0  trackbacks-0

          這個問題算是個老問題了。
          所以,標(biāo)題加上一個再字。

          我主要說一下模擬這個事件時候容易出現(xiàn)的問題。

          對于FF,Opera9,原生DOMContentLoad支持,就不說了,最頭疼的是IE。
          我最初考慮這個問題的時候,想到的是document的readyState屬性。
          偷窺一下Dojo的源碼,發(fā)現(xiàn)它也是基于這個屬性去做的,那時,我基本就認準(zhǔn)了這個方法。
          于是再后來JSI1和JSI2早期的預(yù)覽版本中,都是基于這個屬性做的,后來,有個朋友向我反應(yīng),說JSI的裝飾引擎在IE上啟動比FF慢很多,我當(dāng)時就猜測,是否是這個DOMContentLoad的問題。

          經(jīng)過測試,發(fā)現(xiàn),確實,readyState必須等待圖片裝載完成之后才能置為complete。
          于是到網(wǎng)上搜索一下其他辦法,最終 Dean Edwards的blog上描述的一個基于script defer屬性的解決辦法勝出:http://dean.edwards.name/weblog/category/dom/onload/
          不過,使用document.write打印一段腳本,我真的不喜歡:(

          在評論里面我們可以看到一些其他的建議,有人認為 readyState == 'complete' 加 readyState==‘interactive’這個狀態(tài)可以準(zhǔn)確模擬DOMContentLoad。我開始簡單測試一下,貌似可行,但是后來發(fā)現(xiàn) readyState==‘interactive’可能受alert等函數(shù)影響,就是說,一般情況下,readyState== ‘interactive’時,dom是裝載完了的,但是,當(dāng)你文檔裝載過程中,調(diào)用了alert函數(shù),那么,readyState將提前置為 ‘interactive’。

          總之,目前來說,我知道的,只有兩個辦法可以真正實現(xiàn)IE上模擬DOMContentLoad

            1.htc ondocumentready(需要額外的HTC文件)
            2.script defer(必須使用document.write打印一段腳本標(biāo)記,jquery目前采用的方式)

          最常見的一個錯誤:
            document.readyState(Dojo目前(0.4.1)采用的方式)

          再說一下JSI的DOMContentLoad實現(xiàn)的使用接口。

          js.html.EventUtil.addDOMReadyListener(<Function>listener ,<boolean>runAnyCase )

          第二個參數(shù)用于確保listener 在任何時候都會被調(diào)用(FF DOMContentLoad事件如果在事件發(fā)生之后設(shè)置listener是無效的)

          posted on 2007-06-25 09:13 金大為 閱讀(666) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 陇南市| 独山县| 临安市| 清新县| 汉寿县| 黑龙江省| 朝阳县| 本溪| 栖霞市| 大邑县| 灵台县| 阿拉善盟| 上蔡县| 京山县| 五台县| 图木舒克市| 微山县| 资中县| 汝州市| 黎川县| 扎鲁特旗| 巴林右旗| 红河县| 乳山市| 六枝特区| 兖州市| 长治市| 资阳市| 鄱阳县| 钦州市| 和田县| 崇仁县| 康乐县| 手游| 封丘县| 兴宁市| 汉源县| 大英县| 深圳市| 雷波县| 赤壁市|