在延遲attirbute MDN says:是否在DOMContentLoaded事件之前執行了延期腳本?
此布爾屬性被設置爲指示該腳本是爲了執行該文檔已被解析後,瀏覽器,但發射DOMContentLoaded之前。 defer屬性只能用於外部腳本。
在DOMContentLoaded
MDN also says:
的DOMContentLoaded事件被觸發時,最初的HTML文檔完全加載和分析,不等待樣式 ...
所以DOMContentLoaded
在CSSOM
準備好之前發射。這意味着在CSSOM
準備就緒之前,推遲的腳本是執行。但如果這是真的,腳本一定不能獲得正確的css屬性值,並且不能正確應用css。但事實並非如此,我們知道所有延遲腳本都能正常工作。
- 所以是MDN文檔技術上不正確的?
- 我在哪裏可以找到DOMContentLoaded`的官方文檔?我在https://dom.spec.whatwg.org/搜索,但無法找到它。
P.S:請不就是那個google says是CSSOM執行任何內嵌javscript
之前建造但谷歌在技術上是不正確。在CSSOM準備好之前,內聯JavaScript被執行。從我的測試中,我發現MDN是正確的,如果js文件(延遲和非延遲)在css文件(或js內聯)之前下載,那麼在CSSOM準備好之前執行js。所以JS可能會錯誤地處理樣式。爲了避免這種情況,我們需要在所有js邏輯之前進行強制重排。
因此,如果用戶訪問我們的網站與所有的JS需要已經被緩存和css不緩存或JS被CSS之前下載的,然後他(她)可能會看到不正確呈現的頁面。爲了避免這種情況,我們應該在我們所有網站的js文件中添加強制重排。
另外一個相關的討論已經在http://stackoverflow.com/q已持續/ 42891628/3429430 – user31782