我使用Modernizr.load()方法来测试浏览器(即)是否能理解媒体查询,如果不能,我就加载respond.js库。
但是,我看到通过modernizr.load方法加载respond.js会得到一个FOUC,而内联脚本方法不会。
modernizr.load方法:
<script>
Modernizr.load([{
load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
complete: function () {
if (!window.jQuery) {
yepnope('js/libs/jquery.js?v=1.7.2');
}
}
},
{
test: Modernizr.mq('only all'),
nope: 'js/plugins/respond.js?v=v1.1'
}])
</script>内联方法:
<!--[if lte IE 8]>
<script src="js/plugins/respond.js?v=v1.1"></script>
<![endif]-->为什么会这样呢?异步方法不是应该更快吗?或者是内联方法更好,因为脚本阻塞了DOM并等待脚本加载...?
发布于 2012-04-21 03:05:12
这取决于您对FOUC的关心程度。异步方法的优点是它是非阻塞的。我会改变它,使Respond优先,这样您就不必等待解析jQuery。这可能会解决FOUC问题。在<head> (see here)中调用Modernizr.load,如下所示:
Modernizr.load([{
test: Modernizr.mq('only all'),
nope: 'js/plugins/respond.js?v=v1.1'
},{
load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
complete: function () {
window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2');
}
}]);你的IE conditional也是一个很好的解决方案--可以说是更好。如果你这样做了,那么只需要把它放在jQuery之前,你就没问题了:
<!--[if lt IE 9]>
<script src="js/plugins/respond.js?v=v1.1"></script>
<![endif]-->
Modernizr.load([{
load: 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
complete: function () {
window.jQuery || Modernizr.load('js/libs/jquery.js?v=1.7.2');
}
}]);https://stackoverflow.com/questions/10064079
复制相似问题