首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现代测试

现代测试
EN

Stack Overflow用户
提问于 2011-10-18 22:09:19
回答 3查看 6.4K关注 0票数 3

为什么这个警报既有是又有错呢?

代码语言:javascript
复制
Modernizr.load([
    {
        test: Modernizr.cssgradients,
        yep: alert('Supports it!'),
        nope: alert('Oh, damn! This browser sucks!')
    }
]);

我在OS上使用的是最新的chrome。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-18 22:12:42

因为您直接在那里调用alert(),并且来自alert() (总是undefined)的结果被分配给yepnope属性。您需要将alert()包装在一个函数中,并改为分配该函数:

代码语言:javascript
复制
Modernizr.load([
    {
        test: Modernizr.cssgradients,
        yep: function () { alert('Supports it!') },
        nope: function () { alert('Oh, damn! This browser sucks!') }
    }
]);

这仍然是行不通的,因为这不是yepnope的工作方式。yepnope应该是加载的JS文件的路径:

代码语言:javascript
复制
Modernizr.load([
    {
        test: Modernizr.cssgradients,
        nope: 'cssgradients-shim.js'  //-> load a JS file to draw your gradients
    }
]);

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

代码语言:javascript
复制
if (!Modernizr.cssgradients) {
    alert('Oh, damn! This browser sucks!');
}
票数 13
EN

Stack Overflow用户

发布于 2012-03-04 20:47:58

使用yepnope前缀,可以运行预定义的命名函数。注意:我只在OS上用最新的chrome进行了测试。

然而,要实现这一点,您需要一个“虚拟URL",例如,您计划加载到页面上的图像(您的徽标是一个很好的候选者)。

此外,由于Modernizr.load仅为yepnope.apply方法设置别名,因此您需要通过名称引用yepnope来添加前缀。

代码语言:javascript
复制
/*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,并且/或者您可以编写一个比这里所示的泛型函数执行器更有目的的前缀。

票数 3
EN

Stack Overflow用户

发布于 2011-10-18 22:24:50

yepnope参数不接受函数作为参数。它们应该是stringarray of strings,指示根据test是成功还是失败来加载脚本。有关详细信息,请参阅Modernizr.load上的文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7808585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档