如何确定浏览器是否支持超链接的数据URI

Thr*_*gle 6 html javascript internet-explorer data-uri browser-feature-detection

除浏览器嗅探外,有没有办法确定浏览器是否支持使用数据URI进行超链接?

这是上下文:

我创建一个链接,要么下载使用一个方便的数据URI或者,通过JavaScript产生,如果浏览器不支持使用数据URI的超链接信息的CSV文件,生成所需内容的HTML表格.

现在我的代码检查window.URL属性的存在,这在IE9及以下版本中不存在.(现在这个工作正常,因为我需要支持的IE用户在兼容模式下运行,模拟IE8.)

if(window.URL){
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data);
    downloadLink.setAttribute("download","download.csv");
}else{
    downloadLink.href= "#";
    downloadLink.innerHTML = "table view";
    downloadLink.onclick = function(){
        // build and display HTML table
        return false;
    };
}
Run Code Online (Sandbox Code Playgroud)

然而,有一个与在Internet Explorer中的新版本(10,11,以及边缘),它们支持的window.URL对象但有一些重叠不会允许数据URI的超链接.

如何确保下载CSV的链接永远不会显示给不支持此类功能的浏览器?

Thr*_*gle 0

我相信我已经找到答案了。尝试检测元素download上是否存在属性<a>

var browserSupportsDataURIsForHyperlinks = 
    typeof document.createElement("a").download  !== "undefined";
Run Code Online (Sandbox Code Playgroud)

或者

var browserSupportsDataURIsForHyperlinks = 
    "download" in document.createElement("a");
Run Code Online (Sandbox Code Playgroud)

...就我而言,我已经有一个可以使用的锚标记 ( downloadLink),所以我不需要创建一个新的:

if(typeof downloadLink.download !== "undefined"){
    downloadLink.href = "data:text/csv;charset=utf-8," + encodeURIComponent(data);
    downloadLink.setAttribute("download","download.csv");
}else{
    downloadLink.href= "#";
    downloadLink.innerHTML = "table view";
    downloadLink.onclick = function(){
        // build and display HTML table
        return false;
    };
}
Run Code Online (Sandbox Code Playgroud)

如果有人发现这种方法有任何问题,请告诉我。