IE的script 元素只支持onreadystatechange事件,不支持onload事件。
FireFox,Opera, Chorme, IE11+ 和Safari3+的script 元素不支持onreadystatechange事件,只支持onload事件。
如果要在一個<script src="xx.js"> 加載完成執行一個操作,FF使用onload事件就行了,IE下則要結合onreadystatechange事件和this.readyState
以下是IE的一個例子:
1 | <script type= "text/javascript" src= "xx.xx" onreadstatechange= "if(this.readyState=='load') alert('loaded');" ></script> |
this.readyState的值為'loaded'或者'complete'都可以表示這個script已經加載完成.
【Firefox, Opera, Chorme, IE11+ 和Safari3+會在<script>節點接收完成之后發出一個load 事件。你可以監聽這一事件,以得到腳本準備好的通知】
【Internet Explorer(IE10及以下版本)支持另一種實現方式,它發出一個readystatechange事件。<script>元素有一個readyState屬性,它的值隨著下載外部文件的過程而改變。readyState 有五種取值】
微軟文檔上說,在<script>元素的生命周期中,readyState 的這些取值不一定全部出現,但并沒有指出哪些取值總會被用到。實踐中,我們最感興趣的是“loaded”和“complete”狀態。Internet Explorer 對這兩個readyState值所表示的最終狀態并不一致,有時<script>元素會得到“loaded”卻從不出現“complete”,但另外一些情況下出現“complete”而用不到“loaded”。最安全的辦法就是在readystatechange 事件中檢查這兩種狀態,并且當其中一種狀態出現時,刪除readystatechange事件句柄(保證事件不會被處理兩次)
var script = document.createElement("script")script.type = "text/javascript";//Internet Explorerscript.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; alert("script loaded."); }};script.src = "file1.js";document.getElementsByTagName_r("head")[0].appendChild(script); |
如何結合IE和FF等的區別?參考一下jquery的源碼:
var script = document.createElement('script');script.src="xx.js";script.onload = script.onreadystatechange = function(){ if( ! this.readyState //這是FF的判斷語句,因為ff下沒有readyState這個值,IE的readyState肯定有值 || this.readyState=='loaded' || this.readyState=='complete' // 這是IE的判斷語句 ){ alert('loaded'); }}; |
上面是根據dom加載完去判斷,如果根據dom未加載完去判斷如下:
var script = document.createElement('script');script.src="xx.js";script.onload = script.onreadystatechange = function(){ if( this.readyState && this.readyState=='loading' ){ return } alert('loaded')}; |
大多數情況下,你希望調用一個函數就可以實現JavaScript 文件的動態加載。下面的函數封裝了標準實現和IE 實現所需的功能:
function loadScript(url, callback){ var script = document.createElement ("script") script.type = "text/javascript"; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function(){ callback(); }; } script.src = url; document.getElementsByTagName_r("head")[0].appendChild(script);} |
一個document
的Document.readyState屬性描述了文檔的加載狀態。
loading / 正在加載:document
仍在加載。
interactive / 可交互:文檔已被解析,"正在加載"狀態結束,但是諸如圖像,樣式表和框架之類的子資源仍在加載。
complete / loaded 完成:文檔和所有子資源已完成加載。表示load
狀態的事件即將被觸發。
當該屬性值發生變化時,會在document
對象上觸發readystatechange
事件。
(當document
文檔正在加載時,返回"loading"。當文檔結束渲染但在加載內嵌資源時,返回"interactive",并引發DOMContentLoaded
事件。當文檔加載完成時,返回"complete",并引發load
事件。)
var string = document.readyState; |
// 模擬DOMContentLoadeddocument.onreadystatechange = function () { if (document.readyState == "interactive") { initApplication(); }}// 模擬 load事件document.onreadystatechange = function () { if (document.readyState == "complete") { initApplication(); }} |
document.readyState
Web動態加載JS外部文件(script標簽)
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
木門的十大品牌?1 .蒙田木門蒙恬木門成立于1989年,是木門行業的領導品牌。;的木門行業。它生產的各種木材質量優良,深受許多消費者的喜愛。2.塔塔木門塔塔門業成立于1999年,隸屬于北京億泰同創實業有限公司旗下品牌。amp這是一個最早從事研發的企業之一。amp在研發和生產室內門,具有卓越的品質和巨大的市場競爭力。3.展志天華木門展志天華是一家專注木業26年的大型家居建材企業。作為航天部門的合作伙...
兒童短頭發怎么扎?1.將短發兩邊扎成小球。這種綁法簡單利落,守氣劉海有一種瞬間被萌化的感覺,簡直萌到骨子里了。2、短發寶寶也可以考慮這個丸子頭!把頭發都扎起來綁個皮筋固定就行了!這是一款超級流行的兒童發型!尤其是炎熱的夏天,讓小公主立馬變得涼快很多!3、帶上一個非常簡單的寶寶短發扎法,一個發夾就可以輕松搞定!就把頭發別在一邊,劉海是斜的。你不 不一定要穿裙子才能成為淑女!4.斜扎一個馬尾,自然流露...
微信sns文件夾是什么?微信SNS文件夾是存儲微信使用過程中保存的圖片或相關數據緩存的文件夾。我們可以及時清理微信使用過程中產生的緩存數據,保持手機的流暢性。清理微信緩存數據的具體步驟如下:1。首先,我們打開手機上的微信應用程序,然后點擊本頁下面的“設置”選項。2. 然后單擊此頁底部的“常規”選項。3. 然后單擊此頁中的“存儲空間”列。4. 然后我們可以在這個頁面看到“清理微信緩存”按鈕,然后我們...