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中DOM树操作之使用反向插入方法实例分析
Jan 23 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
微信小程序 PHP生成带参数二维码
Feb 21 Javascript
vue better-scroll插件使用详解
Jan 25 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
js获取图片的base64编码并压缩
Dec 05 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 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
详解PHP swoole process的使用方法
2017/08/26 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
javascript天然的迭代器
2010/10/29 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
讲解python参数和作用域的使用
2013/11/01 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
python实现超级玛丽游戏
2020/03/18 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
新浪微博实习心得体会
2014/01/27 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
出国留学计划书
2014/04/27 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
实习介绍信范文
2015/05/05 职场文书
田径运动会通讯稿
2015/07/18 职场文书
Spring Boot实现文件上传下载
2022/08/14 Java/Android