首頁 > web前端 > js教程 > IE8提示Invalid procedure call or argument 例外的解決方法_javascript技巧

IE8提示Invalid procedure call or argument 例外的解決方法_javascript技巧

WBOY
發布: 2016-05-16 17:49:34
原創
1750 人瀏覽過
1. 環境:
browser_info:"platform:Win32;msie;version:8.0;ie",
navigator:"appCodeName:Mozilla;appName:Microsoft Internet Explorer;appMinorVersion:Release Candate 1 ;cpuClass:x86;平台:Win32;系統語言:zh-cn;使用者語言:zh-cn;應用程式版本:4.0(相容;MSIE 8.0;Windows NT 5.1;Tridentu002F4.0;.NET CLR 1.1.4322;. NET CLR 2.0.50727;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729);userAgent:Mozillau002F4.0(相容;MSIE 8.0;Windows NT 5.1;Tridentu002FLR.0. 2.0.50727;.NET CLR 3.0。
複製程式碼
程式碼如下:
alert(document.body.querySelectorAll);
var els = document.body.querySelectorAll('div');
alert (els[2]);// 2 > els.length-1
;




3。 原因分析:

以上程式碼中,els是一個querySelectorAll的結果。 els[2]會拋出異常,而不是回傳undefined。

4。 QWrap程式碼錯誤點:在QWrap的selector裡,有可能會出現對querySelectorAll結果抓取標超界。除以下程式碼的紅色部分


複製程式碼
程式碼如下: /* nativeQuery(refEl,sSelector): 如果存在中斷的querySelectorAll,且只是簡單查詢,則呼叫中斷的查詢,否則傳回null。 * @param {Element} refEl 參考元素* @param {string} sSelector 選擇器字串
* @returns
*/
function nativeQuery(refEl, sSelector) {
if (hasNativeQuery && /^((^|,)s*[.w-][.ws-> ~]*) $/.test(sSelector)) {
//瀏覽如果器自標記querySelectorAll ,且本次查詢是簡單的選擇器,則直接呼叫選擇器來加速
//部分瀏覽器不支援以">~ "開始的關係運算子
var oldId = refEl.id,
tempId,
arr = [],
els;
if (!oldId && refEl.parentNode) { //標準的querySelectorAll中的選擇器是相對於:root的,而不是相對於:scope的
tempId = refEl.id = '__QW_slt_' nativeQueryStamp ;
試{
els = refEl.querySelectorAll('#' tempId ' ' sSelector);
} 最後{
Elute ('id');
}
}
else{
els = refEl.querySelectorAll(sSelector);
}
for (var i = 0, elI; elI = els [i ];) arr.push(elI);
返回arr;
}
回空;
}



5。 符號:

代碼A:for (var i = 0, len = els.length; i 代碼B:for (var i = 0, elI; elI = els[i ];) arr.push(elI);
用「代碼B」代替「代碼A」是一種常見的寫法,然而,仔細聽這台機器,卻冏冏塚塚塚冏塚冏塚了。
6. 問題修復:

老實的改回代碼A。 OK了。


7. 延伸: 「下標超界拋異常,而不是返回未定義」這個坑好冏。 。 。
明顯那同學的機器訪問淘頁面寶,也有類似的異常拋出,不知道是否一樣原因。友情@淘寶同學一下。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板