JS指令碼defer的作用樣本介紹

來源:互聯網
上載者:User

 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屬性得到的好處就不太大。  都是defer惹的禍,這兩天網站查看全文出錯的原因  <p style='line-height: 150%;text-indent: 15pt;'>上周末,本站投放了Google廣告,當時為了防止廣告的投入延長頁面匯入的時間,修改了下Google Ad代碼,<script>使用了defer延遲匯入廣告,我一直使用的是FireFox瀏覽器,一直沒發現有問題,今天,有朋友上本站查資料,她用的是Maxthon,告訴我一查看文章,頁面就一閃就過去了,這才知道有問題,我說這兩天這麼網站的訪問一直在掉呢,一查原因,才發現是defer的原因,因為在Firfox中defer好象是失效的,頁面實際還是原始內容一起載入了,而在IE中,由於延後載入指令碼,對於Google Ad指令碼來說,其使用的是Document.write的寫入方法,並且因為defer的原因,Google AD的指令碼檢測為iframe了,所以當擷取到Google 廣告的實際內容的時候就把整個頁面給覆蓋了,也就造成了查看全文一閃而過的現象。</p>  <p style='line-height: 150%;text-indent: 15pt;'>這都怪我修改了代碼沒這麼測試,以後不管改什麼都需要在IE和FireFox中都測試通過才可以,對於這兩天造成大家的訪問困難致以最最真摯的道歉!</p> <p style='line-height: 150%;text-indent: 15pt;'>另:推薦大家使用FireFox訪問本站,訪問和解析速度以及頁面配置的一致性都更好!</p>  
相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。