我目前正在使用两个Modernizr测试相结合来提供便利功能。我正在使用的两个Modernizr测试是'blob'和'SMIL'。
但是,由于我只是在Modernizr构建中使用这两个测试来实现这一点,我希望将测试组合成一个具有更有意义名称的自定义测试。例如:
;(function enhancedTest() {
Modernizr.addTest('enhanced', function () {
try {
return !!new Blob();
return !!document.createElementNS &&
/SVGAnimate/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'animate')));
} catch (e) {
return false;
}
}, {
aliases: ['enhanced']
});
})();
如果设备不支持try
内的返回部分的 ,我基本上希望测试失败。如果设备支持两者,则应该通过。
我以前从来没有用try和catch写任何东西,我想知道这是否会像我期望的那样起作用?
我担心的是,目前,如果它在第一个return !!new Blob()
成功,它将通过测试(即使它可能在第二部分失败)。
是这样的吗?或者我应该如何重构代码以实现我的目标呢?
答案 0 :(得分:1)
我担心的是,目前,如果它在第一次返回
!!new Blob()
时成功,它将通过测试(即使它可能在第二部分失败)。
你是对的。
尝试:
Modernizr.addTest(
'enhanced',
function() {
try {
new Blob(); // this line can throw an exception.
return !!document.createElementNS && /SVGAnimate/.test( toStringFn.call( document.createElementNS('http://www.w3.org/2000/svg', 'animate') ) );
} catch(e) {
return false;
}
}
);