仅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使用prototype定义对象类型
Feb 07 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
jQuery之排序组件的深入解析
Jun 19 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
Aug 26 Javascript
JQuery下拉框应用示例介绍
Apr 23 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
jquery 判断是否支持Placeholder属性的方法
Feb 07 Javascript
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
前端框架ECharts dataset对数据可视化的高级管理
Dec 24 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
桌面中心(三)修改数据库
2006/10/09 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
分享10段PHP常用代码
2015/11/11 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
js重写方法的简单实现
2016/07/10 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python导入坐标点的具体操作
2019/05/10 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python ubplot使用方法解析
2020/01/10 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
python如何变换环境
2020/07/21 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
英语师范专业毕业生自荐信
2013/09/21 职场文书
给公司的建议书范文
2014/05/13 职场文书
个人汇报材料范文
2014/12/30 职场文书
放射科岗位职责
2015/02/14 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电