IE8提示Invalidprocedurecallorargument异常的解决方法
2023-06-13 09:14:35 时间
1.环境:
browser_info:"platform:Win32;msie;version:8.0;ie",
navigator:"appCodeName:Mozilla;appName:MicrosoftInternetExplorer;appMinorVersion:ReleaseCandidate1;cpuClass:x86;platform:Win32;systemLanguage:zh-cn;userLanguage:zh-cn;appVersion:4.0(compatible;MSIE8.0;WindowsNT5.1;Trident\u002F4.0;.NETCLR1.1.4322;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729);userAgent:Mozilla\u002F4.0(compatible;MSIE8.0;WindowsNT5.1;Trident\u002F4.0;.NETCLR1.1.4322;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729);onLine:true;cookieEnabled:true"
2.错误代码:
复制代码代码如下:
browser_info:"platform:Win32;msie;version:8.0;ie",
navigator:"appCodeName:Mozilla;appName:MicrosoftInternetExplorer;appMinorVersion:ReleaseCandidate1;cpuClass:x86;platform:Win32;systemLanguage:zh-cn;userLanguage:zh-cn;appVersion:4.0(compatible;MSIE8.0;WindowsNT5.1;Trident\u002F4.0;.NETCLR1.1.4322;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729);userAgent:Mozilla\u002F4.0(compatible;MSIE8.0;WindowsNT5.1;Trident\u002F4.0;.NETCLR1.1.4322;.NETCLR2.0.50727;.NETCLR3.0.4506.2152;.NETCLR3.5.30729);onLine:true;cookieEnabled:true"
2.错误代码:
<!DOCTYPEhtml><html><head></head>
<body><div></div></body>
<script>
alert(document.body.querySelectorAll);
varels=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}sSelectorselector字符串
*@returns
*/
functionnativeQuery(refEl,sSelector){
if(hasNativeQuery&&/^((^|,)\s*[.\w-][.\w\s\->+~]*)+$/.test(sSelector)){
//如果浏览器自带有querySelectorAll,并且本次query的是简单selector,则直接调用selector以加速
//部分浏览器不支持以">~+"开始的关系运算符
varoldId=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(vari=0,elI;elI=els[i++];)arr.push(elI);
returnarr;
}
returnnull;
}
5.反思:
代码A:for(vari=0,len=els.length;i<len;i++)arr.push(els[i]);
代码B:for(vari=0,elI;elI=els[i++];)arr.push(elI);
用“代码B”代替“代码A”是一种常见写法,可是,碰到这台机器,却?????????琢恕
6.问题修复:
老老实实的改回代码A。OK了。
7.延伸:
“下标超界抛异常,而不是返回undefined”这个坑好?住!!
貌似那同学的机器访问淘宝页面,也有类似异常抛出,不知是否是同样原因。友情@淘宝同学一下。
相关文章
- Spring StoredProcedure调用Oracle函数各种异常解决方法
- 使用可视化工具和统计方法检测异常值
- 写Hudi异常:'Not an Avro data file' 解决方法
- spring异常:No runnable methods 解决方法
- python-异常处理和错误调试-异步IO程序的调试方法(二)
- Linux下异常PyCurl的错误解决方法
- SQL Server出现System.OutOfMemoryException异常的解决方法
- java通过Throwable的printStackTrace方法将异常信息保存到字符串中详解编程语言
- 状态探索Linux下查看网络连接状态的方法(linux查看连接)
- 解决Oracle异常函数问题的方法(oracle异常函数)
- 解决Oracle异常错误的方法汇总(oracle异常错误)
- MySQL 事务处理异常处理方法研究(mysql事务异常)
- 异常解决Linux中文乱码异常的方法(linux环境中文乱码)
- Oracle数据库异常解决方法:25种有效技巧(oracle数据库异常)
- 解决Redis数据库异常一种有效的方法(数据库redis异常)
- 探索Redis异常的模拟方法(如何模拟redis异常)
- asp.netHttp异常eurl.axd出错信息解决方法
- php更新mysql后获取影响的行数发生异常解决方法
- OracleORA-22908(NULL表值的参考)异常分析与解决方法
- JS中的异常处理方法分享
- JQuery中使用Ajax赋值给全局变量异常的解决方法
- SQLServer出现System.OutOfMemoryException异常的解决方法
- Python中使用异常处理来判断运行的操作系统平台方法