【发布时间】:2012-02-04 20:26:09
【问题描述】:
我今天正在考虑加载 Modernizr polyfill,但遇到了一些麻烦。我喜欢并行加载 jQuery 的想法,因此将 CDN URI(带有本地后备)放在首位。然后我开始加载一些 polyfill,它们都是我在发现 Modernizr 之前使用的所有 jQuery 插件。
问题是,插件更小,并且在 jQuery 完成和执行之前加载,所以 '$' 和 'jQuery' 对象都未定义。 yepnope 文档说,尽管并行下载,加载程序应该尊重依赖脚本的执行顺序,但是按照字母的示例语法仍然会产生错误。
你们可以看看我下面的代码,看看我想要什么吗?这个 sn-p 直接位于 Modernizer 最小化代码之下;它位于我的<head>。仅供参考,在我的<body> 底部也加载了许多效果 jQuery 代码,但我希望 polyfill 在我为它们设置“完成:”功能之前工作。
Modernizr.load([
{
load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js',
complete: function () {
if (!window.jQuery)
Modernizr.load('js/jquery.1.7.1.min.js');
}
},
{//Border Radius
test : Modernizr.borderradius,
nope : 'js/polyfills/jquery.curvycorners.js'
},
{//Text Shadow
test: Modernizr.textshadow,
nope: 'js/polyfills/jquery.textshadow.min.js',
complete: function(){
$(function(){
$("h2").textShadow();
$("h3").textShadow();
$("a.facebook").textShadow();
$("a.twitter").textShadow();
});
}
},
{//Box Shadow
test: Modernizr.boxshadow,
nope: 'js/polyfills/jquery.boxshadow.js'
}
]);
【问题讨论】:
-
窥视 yepnope 文档:" -yepnope.js 具有执行资源回退的能力,并且仍然与第一个并行下载依赖脚本。更清楚的是:yepnope([{ load: 'http:// ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',完成:function () { if (!window.jQuery) { yepnope('local/jquery.min.js'); } } }, { 加载:'jquery.plugin.js',完成:function () { jQuery(function () { jQuery('div').plugin(); }); } }]);
标签: jquery jquery-plugins modernizr dynamic-script-loading