我是新来的Modernizr的,我只是在寻找一种简单的方法来检查整个浏览器的兼容性。我已经产生了Modernizr的脚本来测试只是我的web应用程序,这是高度依赖于HTML5,CSS3和JavaScript的现代方法的最重要组成部分。有没有一种方法能够同时运行所有这些测试?展望文件过来,我看到很多的方法来测试每个功能一个接一个,但我没有看到一个办法做到这一点的一次。我希望做这样的事情:
伪代码
if (Modernizr.testAll()) {
// Load site
} else {
// Redirect to compatibility page
}
事实证明,所有的测试都存储为直接在Modernizr
对象布尔值,所以如果你建立了很多功能的相关性的应用程序,你想在一次测试他们的所有,使用:
var supported = true;
for (var feature in Modernizr) {
if (typeof Modernizr[feature] === "boolean" && Modernizr[feature] == false) {
supported = false;
break;
}
}
我一直在寻找同样的事情,我想出了下面的代码:
for (var feature in Modernizr)
{
if (typeof Modernizr[feature] === "boolean")
{
console.log("Modernizr_" + feature + ": " +Modernizr[feature]);
for (var subFeature in Modernizr[feature])
{
if (typeof Modernizr[feature][subFeature] === "boolean")
{
console.log("Modernizr_" + feature + "_"+ subFeature + ": " + Modernizr[feature]);
}
}
}
}
HTH!
在一个线条,我和所有工作的更清洁的方式
Object.values(Modernizr).indexOf(false) === -1
我个人挣扎了很多与此有关。但是,终于发现在这一天结束的答案。您可以在下面使用我的代码,它会显示完整列表Modernizr的特点和它们的值:
<script type="text/javascript">
$(document).ready(function () {});
</script>
<script type="text/javascript">
$(function () {
function ListAllMOdernizrFeatures() {
var TotalString = "Modernizr features<br><br>";
var arrModernizrFeatures = new Array();
for (var feature in Modernizr) {
if (typeof Modernizr[feature] === "boolean") {
console.log("Modernizr_" + feature + ": " + Modernizr[feature]);
arrModernizrFeatures.push("Modernizr." + feature + ": " + Modernizr[feature])
for (var subFeature in Modernizr[feature]) {
var ModernizrFeature = Modernizr[feature];
if (typeof ModernizrFeature[subFeature] === "boolean") {
arrModernizrFeatures.push("Modernizr." + feature + subFeature + ": " + ModernizrFeature[subFeature]);
}
}
}
}
arrModernizrFeatures.sort(); // in lexicographical order
for (var PropertyIterator = 0; PropertyIterator < arrModernizrFeatures.length; PropertyIterator++) {
TotalString += PropertyIterator + 1 + ". " + arrModernizrFeatures[PropertyIterator] + "<br>";
};
document.getElementById("ListFeatures").innerHTML = TotalString;
}
setTimeout(ListAllMOdernizrFeatures, 100);
});
</script>
用现代的JavaScript(ECMAScript的2017年),你可以利用像这样的Object.values
方法:
if (Object.values(Modernizr).indexOf(false) !== -1) {
console.log('Update your browser (and avoid IE/Edge 😜)')
}
Object.values
将提取所有从Modernizr
测试结果到一个数组,然后将indexOf(false)
测试以查看是否有任何数组项都是假的(即测试失败)。