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的链接永远不会显示给不支持此类功能的浏览器?
我相信我已经找到答案了。尝试检测元素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)
如果有人发现这种方法有任何问题,请告诉我。
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |