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

Posted

技术标签:

【中文标题】如何检查浏览器是不是支持 HTML5 文件上传(FormData 对象)?【英文标题】:How can I check if the browser support HTML5 file upload (FormData object)?如何检查浏览器是否支持 HTML5 文件上传(FormData 对象)? 【发布时间】:2011-11-09 22:03:00 【问题描述】:

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

var fd = new FormData();

遵循此post 的答案,但代码未返回有关浏览器的正确答案,

window.onload = function()

 if (!!window.FileReader)
 
  alert('supported');
 
 else
 
  alert('not supported');
 



Firefox - supported
Chrome - supported
Opera - supported
Safari - not supported
IE9 - not supported

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

Firefox - supported
Chrome - supported
Opera - not supported
Safari - supported
IE9 - not supported

我已经在 Opera 上测试了 html 5 文件上传,它确实工作。

我确信 safari 支持 html 5 文件上传。

【问题讨论】:

【参考方案1】:
  function supportFormData() 
     return !! window.FormData;
  

来源:https://www.new-bamboo.co.uk/blog/2012/01/10/ridiculously-simple-ajax-uploads-with-formdata/

【讨论】:

【参考方案2】:

在 Safari 5.1.7 、Firefox

Safari 将返回文件大小 0

Opera 不支持表单数据的 append 方法

firefox

【讨论】:

【参考方案3】:

这是我用来检查浏览器是否支持 FormData 和上传进度的单行器,在 jQuery 中:

 var xhr2 = !! ( window.FormData && ("upload" in ($.ajaxSettings.xhr()) );

【讨论】:

【参考方案4】:

您可以使用此库提供的解决方法。 https://github.com/francois2metz/html5-formdata

【讨论】:

【参考方案5】:

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

【讨论】:

+1,在 IE8/IE9 ( window.FormData === undefined ) 中返回 true,在 IE10 中返回 false。 应该使用typeof,因为undefined在某些浏览器中不是关键字。 (例如我可以说var undefined = window.FormData @DCShannon 不需要括号:if(typeof window.FormData === 'undefined') @Koen 仅仅因为它们是可选的并不意味着它们被禁止。我更喜欢使用括号。 我没有说它们是被禁止的。但是你写+-和其他“一元运算符”也带括号吗? developer.mozilla.org/en-US/docs/Web/javascript/…【参考方案6】:

您需要检查浏览器是否支持 HTML5 文件 API。我通过检查是否设置了 FileReader 函数来做到这一点,如果没有设置,则意味着浏览器将不支持文件 API。

// Check if window.fileReader exists to make sure the browser supports file uploads
if (typeof(window.FileReader) == 'undefined') 
    
        alert'Browser does not support HTML5 file uploads!');
    

【讨论】:

此代码检查 FileReader 对象,该对象与 FormData 对象不同。【参考方案7】:

从 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));
;

作为 FormData,send() 的能力和上传属性(及其 onprogress 事件)都是 XMLHttpRequest 级别 2 的一部分,您可以测试 .upload 以查看您是否有级别 2。我手边没有 Mac,但该函数(遗憾的是,但正确)对于 Opera 11.50 返回 false(对于 Firefox 4 返回 true)。

【讨论】:

以上是关于如何检查浏览器是不是支持 HTML5 文件上传(FormData 对象)?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查浏览器是不是支持 HTML5?

AJAX文件上传实践与分析,带HTML5文件上传API。

HTML5 fileReader 随堂笔记

基于HTML5和JSP实现的图片Ajax上传和预览

jersey1.x集合html5使用FormData上传多文件实例

jersey1.x集合html5使用FormData上传多文件实例