这是如何提醒的,是的,还是错?

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

我正在使用OS X上的最新铬。

有帮助吗?

解决方案

因为你打电话 alert() 直接在那里,以及 alert() (总是 undefined)分配给 yepnope 特性。你需要包装 alert() 在功能中并分配该功能:

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

这个 仍然 不起作用,因为那不是 是的 作品。 yepnope 应该是加载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前缀,可以运行预定义的命名函数。注意:我只在OS X上使用最新的Chrome测试了此。

但是,要使此工作,您将需要一个“虚拟网址”,例如,您计划在页面上加载的图像(您的徽标是一个很好的候选人)。

另外,因为 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 同样,和/或您可以编写比此处显示的通用函数执行程序更有目的的前缀。

yepnope 参数不接受函数作为参数。他们应该是一个 string 或一个 array of strings 指示脚本根据是否是否 test 成功或失败。查看文档 Modernizr.load 了解更多信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top