僅IE9/10同時(shí)支持script元素的onload和onreadystatechange事件分析
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>IE9/10同時(shí)支持script元素的onload和onreadystatechange事件</title>
<script src="http://code.jquery.com/jquery.min.js" onload="alert(1)" onreadystatechange="alert(2)"></script>
</head>
<body>
</body>
</html>
結(jié)果:
IE6/7/8 : 彈出2
IE9/10 : 彈出2,1
Firefox/Safari/Chrome/Opera : 彈出1
測(cè)試結(jié)果可以看出,IE9后已經(jīng)開(kāi)始支持script的onload事件了。一直以來(lái)我們判斷js文件是否已經(jīng)加載完成就是用以上的兩個(gè)事件。很久以前就知道IE中使用onreadystatechange事件,事件handler中使用readyState的值判斷是否加載完成。其它瀏覽器使用onload事件。
if(isIE){
script.onreadystatechange = function(){
if(this.readyState == 'loaded' || this.readyState == 'complete'){
callback();
}
}
}else{
script.onload = function(){
callback();
}
}
這種寫(xiě)法現(xiàn)在也沒(méi)有問(wèn)題。但如下寫(xiě)法可能會(huì)讓的回調(diào)在IE9/10中執(zhí)行兩次
script.onload = script.onreadystatechange = function(){
if(!this.readyState || this.readyState == "loaded" || this.readyState == "complete"){
callback();
}
}
這種寫(xiě)法的取巧之處在于onload和onreadystatechage都用同一個(gè)函數(shù),F(xiàn)irefox/Safari/Chrome/Opera中不支持onreadystatechage事件,也沒(méi)有readyState屬性,所以 !this.readyState 是針對(duì)這些瀏覽器。readyState是針對(duì)IE瀏覽器,載入完畢的情況是loaded,緩存的情況下可能會(huì)出現(xiàn)readyState為complete。所以?xún)蓚€(gè)不能少。但由于IE9/10也已經(jīng)支持onload事件了,會(huì)造成callback執(zhí)行2次。
http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1
相關(guān)文章
JavaScript列表框listbox全選和反選的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript列表框listbox全選和反選的實(shí)現(xiàn)方法,涉及javascript操作列表框listbox的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03console.log()的作用與實(shí)現(xiàn)方式
這篇文章主要介紹了console.log()的作用與實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01js的隱含參數(shù)(arguments,callee,caller)使用方法
本篇文章只要是對(duì)js的隱含參數(shù)(arguments,callee,caller)使用方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01詳解JavaScript中原始數(shù)據(jù)類(lèi)型Symbol的使用
Symbol是es6引入的一個(gè)新的原始數(shù)據(jù)類(lèi)型,是一個(gè)獨(dú)一無(wú)二的值。這篇文章主要為大家介紹了JavaScript中原始數(shù)據(jù)類(lèi)型Symbol的使用,感興趣的可以了解一下2023-02-02Bootstrap開(kāi)發(fā)實(shí)戰(zhàn)之響應(yīng)式輪播圖
這篇文章主要為大家詳細(xì)介紹了Bootstrap開(kāi)發(fā)實(shí)戰(zhàn)之響應(yīng)式輪播圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06[JS源碼]超長(zhǎng)文章自動(dòng)分頁(yè)(客戶(hù)端版)
[JS源碼]超長(zhǎng)文章自動(dòng)分頁(yè)(客戶(hù)端版)...2007-01-01JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫(huà)效果附源碼下載
本文給大家分享一個(gè)帶有變形動(dòng)畫(huà)特效的下拉導(dǎo)航菜單特效,該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會(huì)快速的根據(jù)菜單內(nèi)容的大小來(lái)動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒。對(duì)導(dǎo)航下拉菜單代碼感興趣的朋友可以參考下本文2016-11-11JS實(shí)現(xiàn)把鼠標(biāo)放到鏈接上出現(xiàn)滾動(dòng)文字的方法
這篇文章主要介紹了JS實(shí)現(xiàn)把鼠標(biāo)放到鏈接上出現(xiàn)滾動(dòng)文字的方法,涉及JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2016-04-04innerText innerHTML的用法以及注意事項(xiàng) [推薦]
我們常常需要使用另外一些對(duì)象的屬性來(lái)實(shí)現(xiàn)動(dòng)態(tài)改變其中的文本,它們就是:innerText,outerText,innerHTML,outerHTML,千萬(wàn)要注意它們的大小寫(xiě),因?yàn)殄e(cuò)一點(diǎn)您就得不到預(yù)期的效果了。2009-05-05利用HTML5的畫(huà)布Canvas實(shí)現(xiàn)刮刮卡效果
大家都玩過(guò)刮刮樂(lè)吧,都想一夜暴富,本文給大家分享一款利用HTML5的畫(huà)布Canvas實(shí)現(xiàn)刮刮卡效果,需要的朋友可以參考下2015-09-09