Modernizr测试

dar*_*ryl 3 javascript modernizr yepnope

为什么这会发出警报,是和否?

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

我在OS X上使用最新的chrome.

And*_*y E 13

因为您alert()直接在那里调用,并且alert()(始终undefined)的结果被分配给yepnope属性.您需要包装alert()一个函数并指定该函数:

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

仍然无效,因为它不是yepnope的工作方式. yep并且nope应该是加载的JS文件的路径:

Modernizr.load([
    {
        test: Modernizr.cssgradients,
        nope: 'cssgradients-shim.js'  //-> load a JS file to draw your gradients
    }
]);
Run Code Online (Sandbox Code Playgroud)

正如您自己发现的那样,如果您不想使用集成的yepnope.js,您可以使用传统方式使用Modernizr :

if (!Modernizr.cssgradients) {
    alert('Oh, damn! This browser sucks!');
}
Run Code Online (Sandbox Code Playgroud)