最终我找到了一个解决方法,IE8缺少Array对象的一些函数,其中jquery collision使用的函数map()就是其中之一,所以我将map函数添加到我的Array对象中,我从ddr-ECMA5 JavaScript库中获取了这段代码:
var __isCallable = (function(){
var __sortCase = (function(){
try {
[].sort('abc');
return false;
} catch(ex) {
return true;
}
})();
return function(obj){
if( typeof obj === 'function' )
return true;
if( typeof obj !== 'object' )
return false;
if( obj instanceof Function || obj instanceof RegExp )
return true;
if( __sortCase ) {
try {
[].sort(obj);
return true;
} catch(ex){ }
}
return false;
};
})();
var AddArrayMapFunction = function() {
var $AP = Array.prototype;
$AP.map || ($AP.map = function(callback) {
if( !__isCallable(callback) )
throw new TypeError( callback + " is not a callable object" );
var thisArg = arguments[1],
len = this.length,
results = new Array(len);
for(var i=0; i < len; ++i) {
if( this.hasOwnProperty(String(i)) ) {
results[i] = callback.call(thisArg, this[i], i, this);
}
}
return results;
});
}
AddArrayMapFunction();
这会产生副作用,它会在你的数组中添加一个额外的元素,即函数“map”,例如:
myArray = ["a","b","c"];
["a","b","c",map:function(){...}]
希望这能帮助到其他想在IE8上支持jquery-collision库的人,虽然不是最好的方法,但是是一个不错的解决方案。