本文提供了一种解决Internet Explorer 8及其更早版本浏览器中Array.prototype.slice方法在HTMLCollection或NodeList上出现脚本错误的方法。通过自定义ArrayFrom函数和覆盖Array.prototype.slice,确保了跨浏览器的兼容性和一致性。
(function(){
/**
* fix IE(lte 8) script error of ArraySlice called on HTMLCollection || NodeList
*/
try{Array.prototype.slice.call(document.forms)}catch(_){
var ArrayFrom=function(obj){
if(obj instanceof Array)return obj;
var l=obj.length>>>0,arr=[];
for(var i=0;i<l;i+=1)arr[i]=obj[i];
return arr;
};
var ArraySlice=Array.prototype.slice;
Array.prototype.slice=function(){
if(this===window||this==null){
throw new Error("Array.prototype.slice called on null or undefined");
}
if(!(this instanceof Object)&&typeof this==="object"){
return ArraySlice.apply(ArrayFrom(this),arguments);
}
return ArraySlice.apply(this,arguments);
};
}
})();