3

なぜこれはyesとfalseの両方に警告するのですか?

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

OSXで最新のChromeを使用しています。

4

3 に答える 3

3

yepnope プレフィックスを使用すると、定義済みの名前付き関数を実行できます。注: OS X の最新の 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、および/またはここに示されている一般的な関数エグゼキューターよりも目的のあるプレフィックスを記述できることです。

于 2012-03-04T12:47:58.397 に答える
2

yepおよびパラメータは、nope関数を引数として受け入れません。が成功したか失敗したかに基づいてロードするスクリプトをstringまたは で示す必要があります。詳細については、ドキュメントを参照してください。array of stringstestModernizr.load

于 2011-10-18T14:24:50.327 に答える