Вопрос

Почему это предупреждает, да, и ложь?

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 Чтобы получить больше информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top