我对功能检测的需求相同,但我没有使用Modernizr。我的用例是我使用makePDF库在客户端生成pdf,但无法使用IE或Edge中的数据URI打开PDF。不幸的是,我能找到的所有功能检测脚本都在测试支持图像的数据URI(这是由MS浏览器支持的),所以我必须自己写。这里的(为理念由于BoltClock的评论以上)的代码:
checkDataURISupport(function (checkResult) {
if (checkResult) {
alert('Files in data URIs are supported.');
} else {
alert('Files in data URIs are NOT supported.');
}
})
function checkDataURISupport(callback) {
try {
var request = new XMLHttpRequest();
request.onload = function reqListener() {
callback(true);
};
request.onerror = function reqListener() {
callback(false);
};
request.open('GET', 'data:application/pdf;base64,cw==');
request.send();
} catch (ex) {
callback(false);
}
}
checkDataURISupport()
我测试在IE 11,边缘25,火狐46和Chrome 49.
作为侧面说明,另一个SO回答(https://stackoverflow.com/a/26003382/634650)使用建议:
supportsDataUri = 'download' in document.createElement('a');
这在IE,但没有优势。
更新
的SO回答上述的组合也包含了有关特征检测在iframe支持链接到引用a SO answer为a Modernizr issue数据URI。在iframe中打开数据URI与在新窗口中打开数据URI基本相同,不支持在iframe中支持数据URI的Microsoft浏览器不支持在新窗口中打开它们。此外,在这些位置提到的iframe支持测试是同步的,所以我建议使用它来代替我的异步解决方案。
您可以通过向数据URI发送Ajax请求来蛮力。 IE和Edge会发生异常。除此之外,我不确定... – BoltClock