Модернизр тестирование - PullRequest
       10

Модернизр тестирование

3 голосов
/ 18 октября 2011

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

Modernizr.load([
    {
        test: Modernizr.cssgradients,
        yep: alert('Supports it!'),
        nope: alert('Oh, damn! This browser sucks!')
    }
]);

Я использую последнюю версию Chrome на OS X.

Ответы [ 3 ]

13 голосов
/ 18 октября 2011

Поскольку вы звоните 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, вы можете просто использовать Modernizr традиционным способом :

if (!Modernizr.cssgradients) {
    alert('Oh, damn! This browser sucks!');
}
3 голосов
/ 04 марта 2012

С префиксами 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, и / или вы можете написать более целенаправленный префикс, чем показанный здесь исполнитель универсальной функции.

2 голосов
/ 18 октября 2011

Параметры yep и nope не принимают функции в качестве аргументов.Это должны быть string или array of strings, указывающие загружаемые скрипты в зависимости от того, успешно ли test или нет.Для получения дополнительной информации см. Документацию по Modernizr.load.

...