为什么这个警报既有是又有错呢?
Modernizr.load([
{
test: Modernizr.cssgradients,
yep: alert('Supports it!'),
nope: alert('Oh, damn! This browser sucks!')
}
]);我在OS上使用的是最新的chrome。
发布于 2011-10-18 22:12:42
因为您直接在那里调用alert(),并且来自alert() (总是undefined)的结果被分配给yep和nope属性。您需要将alert()包装在一个函数中,并改为分配该函数:
Modernizr.load([
{
test: Modernizr.cssgradients,
yep: function () { alert('Supports it!') },
nope: function () { alert('Oh, damn! This browser sucks!') }
}
]);这仍然是行不通的,因为这不是yepnope的工作方式。yep和nope应该是加载的JS文件的路径:
Modernizr.load([
{
test: Modernizr.cssgradients,
nope: 'cssgradients-shim.js' //-> load a JS file to draw your gradients
}
]);正如您自己所发现的那样,如果您不想使用集成的yepnope.js,您可以只使用传统的方式
if (!Modernizr.cssgradients) {
alert('Oh, damn! This browser sucks!');
}发布于 2012-03-04 20:47:58
使用yepnope前缀,可以运行预定义的命名函数。注意:我只在OS上用最新的chrome进行了测试。
然而,要实现这一点,您需要一个“虚拟URL",例如,您计划加载到页面上的图像(您的徽标是一个很好的候选者)。
此外,由于Modernizr.load仅为yepnope.apply方法设置别名,因此您需要通过名称引用yepnope来添加前缀。
/*globals window */
(function (Modernizr) {
"use strict";
window.yepnope.addPrefix('function', function (resourceObj) {
var dummyUrl = 'static/my_logo.png';
resourceObj.noexec = true;
window[resourceObj.url]();
resourceObj.url = dummyUrl;
return resourceObj;
});
// predefined functions
window.alert_support = function () {
window.alert('Supports it!');
};
window.alert_damn = function () {
window.alert('Oh, damn! This browser sucks!');
};
window.alert_boom = function () {
window.alert('boom');
};
// Modernizer.load is an alias for yepnope. See API at http://yepnopejs.com/.
Modernizr.load([{
test: Modernizr.cssgradients,
yep: 'function!alert_support',
nope: 'function!alert_damn'
}, {
test: Modernizr.rgba,
yep: 'function!alert_boom'
}]);
}(window.Modernizr));当然,如果不想污染全局window名称空间,可以将命名函数放在一个对象中,并将window[resourceObj.url]();更改为window.MyObj[resourceObj.url]();。
这样做的真正功能是触发callback函数,命名函数也可以调用Modernizr.load,并且/或者您可以编写一个比这里所示的泛型函数执行器更有目的的前缀。
发布于 2011-10-18 22:24:50
yep和nope参数不接受函数作为参数。它们应该是string或array of strings,指示根据test是成功还是失败来加载脚本。有关详细信息,请参阅Modernizr.load上的文档。
https://stackoverflow.com/questions/7808585
复制相似问题