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 相关文章推荐
jQuery温习篇 强大的JQuery选择器
Apr 24 Javascript
jQuery ready函数滥用分析
Feb 16 Javascript
javascript实现颜色渐变的方法
Oct 30 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
Jun 26 Javascript
JS自定义对象实现Java中Map对象功能的方法
Jan 20 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 Javascript
JS表单传值和URL编码转换
Mar 03 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
解决Vue-Router升级导致的Uncaught (in promise)问题
Aug 07 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
PHP4中实现动态代理
2006/10/09 PHP
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
php操作access数据库的方法详解
2017/02/22 PHP
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
浅谈Vue.js
2017/03/02 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
应届生自荐信
2014/06/30 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
焦点访谈观后感
2015/06/11 职场文书
开学典礼校长致辞
2015/07/29 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
Java死锁的排查
2022/05/11 Java/Android