国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

IE8提示Invalid procedure call or argument 異常的解決方法

2024-05-06 14:21:10
字體:
來源:轉載
供稿:網友
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”這個坑好冏。。。
貌似那同學的機器訪問淘寶頁面,也有類似異常拋出,不知是否是同樣原因。友情@淘寶同學一下。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 雅安市| 周至县| 修水县| 叶城县| 清徐县| 宁城县| 海兴县| 金坛市| 长白| 磐安县| 淳化县| 犍为县| 北碚区| 桃江县| 谷城县| 星子县| 丰城市| 内黄县| 新建县| 深泽县| 永德县| 美姑县| 鸡东县| 榆林市| 济阳县| 温州市| 高州市| 陵川县| 运城市| 阿坝县| 镇巴县| 临武县| 临江市| 屯留县| 如皋市| 博罗县| 易门县| 榆社县| 高雄市| 延寿县| 温泉县|