如何检查浏览器是否支持HTML5文件上传(FormData对象)?

lau*_*kok 31 javascript safari opera file-upload html5-video

如何检查浏览器是否支持HTML5文件上传(FormData对象)?

var fd = new FormData();
Run Code Online (Sandbox Code Playgroud)

根据这篇文章的回答,但代码没有返回关于浏览器的正确答案,

window.onload = function()
{
 if (!!window.FileReader)
 {
  alert('supported');
 }
 else
 {
  alert('not supported');
 }
}


Firefox - supported
Chrome - supported
Opera - supported
Safari - not supported
IE9 - not supported
Run Code Online (Sandbox Code Playgroud)

但正确的浏览器支持应该是,

Firefox - supported
Chrome - supported
Opera - not supported
Safari - supported
IE9 - not supported
Run Code Online (Sandbox Code Playgroud)

我已经测试了Opera上的html 5文件上传,但它无法确定.

我相信safari 支持html 5文件上传.

web*_*sta 70

试试if( window.FormData === undefined )if( window.FormData !== undefined ).

  • 在IE8/IE9中的+1(window.FormData === undefined)`返回true,在IE10中返回false. (12认同)
  • @DCShannon不需要括号:`if(typeof window.FormData ==='undefined')` (3认同)
  • 应该使用`typeof`,因为`undefined`在某些浏览器中不是关键字.(例如,我可以说`var undefined = window.FormData`) (2认同)
  • 我不是说禁止他们。但是,您是否也用括号写出+,-和其他“一元运算符”?https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference#Unary_operators (2认同)

小智 11

来自 http://blog.new-bamboo.co.uk/2010/7/30/html5-powered-ajax-file-uploads

function supportAjaxUploadProgressEvents() {
    var xhr = new XMLHttpRequest();
    return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
};
Run Code Online (Sandbox Code Playgroud)

作为FormData,send()one和upload属性(及其onprogress事件)的能力都是XMLHttpRequest级别2的一部分,你可以测试.upload以查看你是否有2级.我不知道有一个Mac方便,但功能(遗憾的是,但正确)返回Opera 11.50的假(对于Firefox 4也是如此).