Modernizr Testing
-
26-10-2019 - |
Вопрос
Почему это предупреждает, да, и ложь?
Modernizr.load([
{
test: Modernizr.cssgradients,
yep: alert('Supports it!'),
nope: alert('Oh, damn! This browser sucks!')
}
]);
Я использую последний Chrome на OS X.
Решение
Потому что ты звонишь alert()
прямо там и результат из alert()
(всегда undefined
) присваивается yep
а также nope
характеристики. Тебе нужно обернуть alert()
В функции и вместо этого назначьте эту функцию:
Modernizr.load([
{
test: Modernizr.cssgradients,
yep: function () { alert('Supports it!') },
nope: function () { alert('Oh, damn! This browser sucks!') }
}
]);
Этот Все еще не сработает, потому что это не так да да работает. yep
а также nope
Должен быть пути к загруженным файлам JS:
Modernizr.load([
{
test: Modernizr.cssgradients,
nope: 'cssgradients-shim.js' //-> load a JS file to draw your gradients
}
]);
Как вы обнаружили, если вы не хотите использовать интегрированный yepnope.js, вы можете просто использовать Modernizr традиционный путь:
if (!Modernizr.cssgradients) {
alert('Oh, damn! This browser sucks!');
}
Другие советы
С префиксами 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
Кроме того, и/или вы можете написать более целенаправленный префикс, чем генерический исполнитель функции, показанный здесь.
А yep
а также nope
Параметры не принимают функции в качестве аргументов. Они должны быть string
или array of strings
Указывая сценарии на загрузку в зависимости от test
преуспел или потерпел неудачу. Смотрите документацию на Modernizr.load
Чтобы получить больше информации.