defer作用是文件載入完畢了再執行腳本,這樣迴避免找不到物件的問題,下面有個不錯的範例,有興趣的朋友可以參考下。
<script src="../cgi-bin/delscript.js" defer></script> 中的defer作用是文档加载完毕了再执行脚本,这样回避免找不到对象的问题---有点问题 <button id="myButton" onclick="alert('ok')">test</button> <script> myButton.click(); </script> <script> myButton.click(); </script> <button id="myButton" onclick="alert('ok')">test</button> <script defer> function document.body.onload() { alert(document.body.offsetHeight); } </script>
加上 defer 等於在頁面完全在入後再執行,相當於 window.onload ,但應用上比 window.onload 更有彈性!
defer是腳本程式強大功能中的一個「無名英雄」。它告訴瀏覽器Script段包含了無需立即執行的程式碼,並且,與SRC屬性聯合使用,它還可以使這些腳本在後台被下載,前台的內容則正常顯示給用戶。
但是文件載入完畢了再執行腳本
最後請注意兩點:
1、不要在defer型的腳本程式段中呼叫document.write指令,因為document.write將產生直接輸出效果。
2、而且,不要在defer型腳本程式段中包含任何立即執行腳本要使用的全域變數或函數。
一個常用的最佳化效能的方法是:當腳本不需要立即執行時,在<script>標籤中設定「defer」屬性。 (立即腳本沒有被包含在一個function區塊中,因此會在載入過程中執行。) 設定「defer」屬性後,IE就不必等待該腳本裝載和執行完畢。這樣頁面載入會比較快。一般來說,這也表示立即腳本最好放在function區塊中,並在document或body物件的onload 句柄中處理該函數。在有一些腳本需要依賴使用者操作而執行時----例如點擊按鈕,或移動滑鼠到某個區域----使用該屬性非常有用。但當有一些腳本需要在頁面載入過程中或載入完成後執行,使用defer屬性得到的好處就不太大。 </script>
都是defer惹的禍,這兩天網站查看全文出錯的原因。
上週末,本站投放了Google廣告,當時為了防止廣告的投入延長頁面導入的時間,修改了下Google Ad代碼,使用了defer延遲導入廣告,我一直使用的是FireFox瀏覽器,一直沒發現有問題。今天,有朋友上本站查資料,她用的是Maxthon,告訴我一查看文章,頁面就一閃就過去了,這才知道有問題,我說這兩天這麼網站的訪問一直在掉呢?一查原因,才發現是defer的原因,因為在Firfox中defer好像是失效的,頁面實際還是原始內容一起載入了,而在IE中,由於推遲載入腳本,對於Google Ad腳本來說,其使用的是Document.write的寫入方法,並且因為defer的原因。 Google AD的腳本檢測為iframe了,所以當獲取到Google 廣告的實際內容的時候就把整個頁面給覆蓋了,也就造成了查看全文一閃而過的現象。
這都怪我修改了程式碼沒這麼測試,以後不管改什麼都需要在IE和FireFox中都測試通過才可以,對於這兩天造成大家的訪問困難致以最最真摯的道歉!
另:推薦大家使用FireFox造訪本站,存取和解析速度以及頁面佈局的一致性都更好!
以上就是本章的全部內容,更多相關教學請訪問JavaScript影片教學!