确定浏览器是否具有拖放能力?

我正在实现jQuery文件上传,并试图找出检测客户端是否可以支持拖放的最佳方法,这样我就可以渲染类似“拖放文件到这里上传”的内容,只有他们能够真正做到这一点。

在插件代码中,我可以看到函数isXHRUploadCapable几乎与拖放支持相关,但我认为这比任何事情更巧合。 (它使用iFrames发布上传而不是IE和Opera的XMLHTTPRequest上传)。 如果支持拖放,看不到任何让我知道的东西,所以我怀疑它只是一个事件发生或不发生。

文档说“Windows版本的Safari不支持拖放.MSIE和Opera不支持拖放,多文件选择或上传进度指示。” 那么,也许只是Windows版本的Safari支持XMLHTTPRequest上传,而不是拖放?

无论如何 – 我试图找出最好的方法来检测浏览器是否支持使用此插件拖放上传,我不知道如何做到这一点。 拖放function是否可以轻松测试? 我该怎么办? 这个function是依赖于浏览器,还是Jquery Upload是否特别支持该浏览器?

Modernizr是事实上的浏览器支持检测插件,支持拖放检测。

在Modernizr 1.5中,我们测试以下拖动事件:

  • 拖动
  • 的dragstart
  • 的dragenter
  • 的dragover
  • dragleave
  • dragend
  • 下降

资源

我在同一个问题,尝试检查window.FileReader && Modernizr.draganddrop如你所说。 这是我的测试输出:

 IE window.FileReader==undefined && Modernizr.draganddrop==true OPERA window.FileReader==window.FileReader && Modernizr.draganddrop==false CHROME window.FileReader==window.FileReader && Modernizr.draganddrop==true FIREFOX window.FileReader==window.FileReader && Modernizr.draganddrop==true SAFARI window.FileReader==undefined && Modernizr.draganddrop==true 

因此,您的条件取消了D&D不支持的浏览器IE和OPERA。 但它还会降低支持拖放的SAFARI。

在这种情况下,我们可以添加jQuery.browser检查以删除IE和OPERA。

Modernizr的当前版本2.6.2包括对FileReader的测试。

 Modernizr.filereader && Modernizr.draganddrop 

文件filereader测试位于非核心检测部分下。 draganddrop位于HTML5部分。 访问Modernizr下载页面 。

它有点棘手。 iOS7报告它支持FileReaderdraganddrop图片上传。 由于我正在寻找一个我不能用iOS做的更通用的文件上传,我需要另一个答案。

Modernizr第57期在这里谈论这个问题。 现在Windows 8允许触摸和鼠标,这是棘手的。 我成功使用了chriskeeble中间的代码。 它依赖于Modernizr和代理检测。