Javascript IE8和现代化:对象不';不支持此属性或方法?

Javascript IE8和现代化:对象不';不支持此属性或方法?,javascript,internet-explorer,modernizr,Javascript,Internet Explorer,Modernizr,我在一个正在开发的站点上使用Modernizr2.6.2,在IE8中遇到了一个令人沮丧的错误。我正在文档的开头加载Modernizer: <script src="js/vendor/modernizr-2.6.0-ck.js"></script> 然后我在页面底部加载一个base.js文件,就在关闭标记之前。在该base.js文件中,我有以下代码(): /** *非jQuery hasClass函数,用于检查 *元素上的类名。 *@param{string}脚本要

我在一个正在开发的站点上使用Modernizr2.6.2,在IE8中遇到了一个令人沮丧的错误。我正在文档的开头加载Modernizer:

<script src="js/vendor/modernizr-2.6.0-ck.js"></script>

然后我在页面底部加载一个base.js文件,就在关闭
标记之前。在该base.js文件中,我有以下代码():

/**
*非jQuery hasClass函数,用于检查
*元素上的类名。
*@param{string}脚本要检查的脚本字符串
*@param{string}cls是我们正在查找的类名
*@return{boolean}真或假
*/
/*
函数类(脚本、cls){
var r=new RegExp('\\b'+cls+'\\b');
返回r.test(脚本);
}*/
/**
*从标签获取ID
*/
函数matchBodyID(匹配){
返回match.toLowerCase()==document.body.id.toLowerCase();
}
/**
*检查body标记是否具有“数据脚本”属性。
*如果为true,则收集内容。如果为false,则设置为false。
*/
//var dataScripts=document.body.getAttribute(“数据脚本”)| | false;
/**
*必须先定义变量,然后才能使用它们。
*/
var modernizer=modernizer | |{},
ScaleText=ScaleText | |{};
/*
*使用Modernizr.load,我们可以运行测试来查看
*我们可以使用哪些功能并加载我们的
*polyfills可以处理那些不是
*/
var timestamp=new Date().getTime();
现代化负荷([
{
负载:[
“//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js”,
'js/plugins/image array ck.js?t='+时间戳,
'js/plugins/jquery.debouncedck.js',
'js/plugins/menu ck.js?t='+时间戳
],
完成:函数(){
如果(!window.jQuery){
modernizer.load('js/vendor/jquery-1.8.1.min.js');
}
ScaleText.invoke();
$(“#跳到内容”).bind(“单击菜单”,函数(事件){
event.preventDefault();
变量$this=$(this),
$par=$($this.parent());
$par.toggleClass(“开放式”);
});
}
}, {
测试:matchBodyID('home')| | matchBodyID('department'),
是的:[
'js/plugins/spin.min.js',
'js/slideshow ck.js',
'css/royalslider/royalslider.css',
'css/royalslider/rs minimal white.css',
'js/plugins/tabs ck.js?t='+时间戳,
'js/plugins/下划线-min.js'
]
}, {
测试:matchBodyID(“内部”),
是的:[
'js/plugins/spin.min.js',
'js/plugins/tabs ck.js?t='+时间戳,
//'js/plugins/menu ck.js?t='+时间戳,
'js/plugins/下划线-min.js'
]
},
//检查iOS
{
测试:Modernizer.appleios,
是的:[
'js/plugins/ios ck.js'
]
},
//功能性多填料
{
测试:Modernizer.flexbox,
否:['js/polyfills/flexie.js']
}
]);
/*
*ScaleText
*尝试为创建自定义类型缩放器
*需要缩放以适应其父级的大型类型
*/
ScaleText={
调用:函数(){
$(“.scalable”)。每个(函数(索引、元素){
变量$parent=$(元素),
$wrapper=ScaleText.wrapIt($parent.first(“div”);
$parent.css({
“溢出”:“隐藏”,
“不透明度”:0
});
$wrapper.css({
“-webkit转换原点”:“左上角”,
“-moz变换原点”:“左上角”,
“-ms变换原点”:“左上角”,
“-o-transform-origin”:“左上角”,
“变换原点”:“左上”
});
ScaleText.checkSize($parent,$wrapper);
jQuery(window).on(“debouncedresize.ScaleText”,函数(){
ScaleText.checkSize($parent,$wrapper);
});
});
},
checkSize:function($parent,$wrapper){
变量scrollWidth=$parent[0]。scrollWidth,
宽度=$parent.width(),
scrollHeight=$parent[0]。scrollHeight,
高度=$parent.height(),
比率,摩擦,摩擦;
wRatio=宽度/滚动宽度;
hRatio=高度/滚动高度;
比率=(wRatio
出于某种原因,IE8在
modernizer.load
块处完全阻塞,只说
对象不支持此属性或方法。附上截图

关于为什么会发生这种情况的想法

编辑

我应该提到我正在使用一个定制的Modernizer版本:


我也有这个。看起来Modernizer.load()是可选的。以下内容摘自Modernizer-2.5.3的标题

/*     
 * Modernizr has an optional (not included) conditional resource loader
 * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
 * To get a build that includes Modernizr.load(), as well as choosing
 * which tests to include, go to www.modernizr.com/download/
 */
您需要再次转到并获取该软件包-确保选中“额外”类别下的modernizer.load。这样做将在文件末尾包含yepnopejs

是附加的,我把它放在我现有的modernizr.*.js中,一切都正常工作。

我在IE8中遇到了同样的“对象不支持此属性或方法”错误(尽管不是在Chrome中)

因为我的其他页面引用了相同的Modernizer声明脚本,所以我怀疑我的问题在其他地方。结果我在加载块中有一个额外的逗号:

Modernizr.load([
   {
      load: [
         'path/to/something.js',,  // <--removing this extra comma resolved the issue
         'path/to/something-else.js'
      ]
   }
]);
modernizer.load([
{
负载:[
Modernizr.load([
   {
      load: [
         'path/to/something.js',,  // <--removing this extra comma resolved the issue
         'path/to/something-else.js'
      ]
   }
]);