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 相关文章推荐
枚举JavaScript对象的函数
Dec 22 Javascript
jquery禁用右键示例
Apr 28 Javascript
Javascript编程之继承实例汇总
Nov 28 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
Mar 17 Javascript
Javascript blur与click冲突解决办法
Jan 09 Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
Nov 05 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
微信小程序实现通讯录列表展开收起
Nov 18 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脚本的10个技巧(1)
2006/10/09 PHP
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
Vue AST源码解析第一篇
2017/07/19 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
重命名批处理python脚本
2013/04/05 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
python简单获取数组元素个数的方法
2015/07/13 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Django forms组件的使用教程
2018/10/08 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
机修工岗位职责
2013/11/24 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
高中家长意见怎么写
2015/06/03 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS