IE8提示Invalid procedure call or argument 异常的解决方法


Posted in Javascript onSeptember 30, 2012

1. 环境:
browser_info:"platform:Win32;msie;version:8.0;ie",
navigator:"appCodeName:Mozilla;appName:Microsoft Internet Explorer;appMinorVersion:Release Candidate 1;cpuClass:x86;platform:Win32;systemLanguage:zh-cn;userLanguage:zh-cn;appVersion:4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\u002F4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729);userAgent:Mozilla\u002F4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\u002F4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729);onLine:true;cookieEnabled:true"
2. 错误代码:

<!DOCTYPE html><html><head></head> 
<body><div></div></body> 
<script> 
alert(document.body.querySelectorAll); 
var els = document.body.querySelectorAll('div'); 
alert(els[2]);// 2 > els.length-1 
</script> 
</html>

3. 原因分析:
以上代码中,els是一个querySelectorAll的结果。els[2]会抛异常,而不是返回undefined.

4. QWrap代码错误点:在QWrap的selector里,有可能会出现对querySelectorAll结果取下标超界。参见以下代码的红色部分

/* 
* nativeQuery(refEl,sSelector): 如果有原生的querySelectorAll,并且只是简单查询,则调用原生的query,否则返回null. 
* @param {Element} refEl 参考元素 
* @param {string} sSelector selector字符串 
* @returns 
*/ 
function nativeQuery(refEl, sSelector) { 
if (hasNativeQuery && /^((^|,)\s*[.\w-][.\w\s\->+~]*)+$/.test(sSelector)) { 
//如果浏览器自带有querySelectorAll,并且本次query的是简单selector,则直接调用selector以加速 
//部分浏览器不支持以">~+"开始的关系运算符 
var oldId = refEl.id, 
tempId, 
arr = [], 
els; 
if (!oldId && refEl.parentNode) { //标准的querySelectorAll中的selector是相对于:root的,而不是相对于:scope的 
tempId = refEl.id = '__QW_slt_' + nativeQueryStamp++; 
try { 
els = refEl.querySelectorAll('#' + tempId + ' ' + sSelector); 
} finally { 
refEl.removeAttribute('id'); 
} 
} 
else{ 
els = refEl.querySelectorAll(sSelector); 
} 
for (var i = 0, elI; elI = els[i++];) arr.push(elI); 
return arr; 
} 
return null; 
}

5. 反思:

代码A:for (var i = 0, len = els.length; i < len; i++) arr.push(els[i]);

代码B:for (var i = 0, elI; elI = els[i++];) arr.push(elI);
用“代码B”代替“代码A”是一种常见写法,可是,碰到这台机器,却?????????琢恕

6. 问题修复:
老老实实的改回代码A。OK了。

7. 延伸:
“下标超界抛异常,而不是返回undefined”这个坑好?住!!
貌似那同学的机器访问淘宝页面,也有类似异常抛出,不知是否是同样原因。友情@淘宝同学一下。

Javascript 相关文章推荐
bcastr2.0 通用的图片浏览器
Nov 22 Javascript
JavaScript Accessor实现说明
Dec 06 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
Mar 25 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
vue.js 实现评价五角星组件的实例代码
Aug 13 Javascript
教你使用vue-cli快速构建的小说阅读器
May 13 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 Javascript
Java无向树分析 实现最小高度树
Apr 09 Javascript
js 手机号码合法性验证代码集合
Sep 29 #Javascript
JavaScript模板入门介绍
Sep 26 #Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 #Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 #Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 #Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 #Javascript
js DOM 元素ID就是全局变量
Sep 20 #Javascript
You might like
swfupload 多文件上传实现代码
2008/08/27 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
两种php实现图片上传的方法
2016/01/22 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python字符串格式化
2015/06/15 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
python实现ID3决策树算法
2017/12/20 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
为什么说python更适合树莓派编程
2020/07/20 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
汽车专业人才自我鉴定范文
2013/12/29 职场文书
小学生评语大全
2014/04/18 职场文书
交通志愿者活动总结
2014/06/27 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书