仅IE9/10同时支持script元素的onload和onreadystatechange事件分析


Posted in Javascript onApril 27, 2011

如下

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>IE9/10同时支持script元素的onload和onreadystatechange事件</title> 
<script src="http://code.jquery.com/jquery.min.js" onload="alert(1)" onreadystatechange="alert(2)"></script> 
</head> 
<body> 
</body> 
</html>

结果:
IE6/7/8 : 弹出2
IE9/10 : 弹出2,1
Firefox/Safari/Chrome/Opera : 弹出1
测试结果可以看出,IE9后已经开始支持script的onload事件了。一直以来我们判断js文件是否已经加载完成就是用以上的两个事件。很久以前就知道IE中使用onreadystatechange事件,事件handler中使用readyState的值判断是否加载完成。其它浏览器使用onload事件。
if(isIE){ 
script.onreadystatechange = function(){ 
if(this.readyState == 'loaded' || this.readyState == 'complete'){ 
callback(); 
} 
} 
}else{ 
script.onload = function(){ 
callback(); 
} 
}

这种写法现在也没有问题。但如下写法可能会让的回调在IE9/10中执行两次
script.onload = script.onreadystatechange = function(){ 
if(!this.readyState || this.readyState == "loaded" || this.readyState == "complete"){ 
callback(); 
} 
}

这种写法的取巧之处在于onload和onreadystatechage都用同一个函数,Firefox/Safari/Chrome/Opera中不支持onreadystatechage事件,也没有readyState属性,所以 !this.readyState 是针对这些浏览器。readyState是针对IE浏览器,载入完毕的情况是loaded,缓存的情况下可能会出现readyState为complete。所以两个不能少。但由于IE9/10也已经支持onload事件了,会造成callback执行2次。

相关:

http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1 

http://www.w3.org/TR/html5/scripting-1.html#script

https://developer.mozilla.org/En/HTML/Element/Script 

Javascript 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
window.print打印指定div指定网页指定区域的方法
Aug 04 Javascript
jQuery使用post方法提交数据实例
Mar 25 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
通过AngularJS实现图片上传及缩略图展示示例
Jan 03 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
Jul 24 Javascript
JavaScript实现多重继承的方法分析
Jan 09 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 Javascript
js实时监听文本框状态的方法
Apr 26 #Javascript
Javascript中的window.event.keyCode使用介绍
Apr 26 #Javascript
Javascript中正则表达式的全局匹配模式分析
Apr 26 #Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 #Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
Apr 26 #Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 #Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 #Javascript
You might like
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
js实现开关灯效果
2020/03/30 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
python如何把字符串类型list转换成list
2020/02/18 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
css3中transition属性详解
2014/09/02 HTML / CSS
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
火车来了教学反思
2014/02/11 职场文书
四下基层实施方案
2014/03/28 职场文书
学校社会实践活动总结
2014/07/03 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS