С префиксами yepnope можно запускать предопределенные именованные функции. Примечание: я только что проверил это с последней версией Chrome на OS X.
Однако, чтобы это работало, вам понадобится «фиктивный 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
, и / или вы можете написать более целенаправленный префикс, чем показанный здесь исполнитель универсальной функции.