【问题标题】:Fallback AJAX file upload for Internet ExplorerInternet Explorer 的后备 AJAX 文件上传
【发布时间】:2012-12-18 16:05:48
【问题描述】:

我在 HTML5 中使用 xHR2 和 File api 为内部项目实现了 AJAX 文件上传器。我们只需要支持 Firefox/Safari/Chrome。我使用以下链接作为参考

  1. http://www.html5rocks.com/en/tutorials/file/xhr2/
  2. http://www.html5rocks.com/en/tutorials/dnd/basics/
  3. https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

现在我需要支持 Internet Explorer 10 及以下版本。 IE 10 支持 XHR2,但文件 API 支持为 lacking。有没有办法检测这些 API 不受支持?如果我可以检测到API不支持,那么我如何实现IE的AJAX文件上传?

我使用的是 Google Closure JS 库,而不是 jQuery 或任何其他库。库的选择不能更改。请在响应中使用 jQuery 或其他一些效果。但是,任何使用 jQuery 的代码 sn-ps 都可以。

【问题讨论】:

  • 不缺少即10的文件api支持。您可以在 ie10 中使用 xhr 上传文件,没有任何问题。

标签: javascript ajax file-upload google-closure fallback


【解决方案1】:

可能检测 File API 是否存在的最简单方法是

typeof File

在支持 File API 的浏览器中,它应该返回一个对象或函数 - Internet Explorer 返回undefined

至于如何回退并使其适用于所有用户

我使用了这个工具https://github.com/valums/ajax-upload,它创建了一个 iframe 并将上传内容发布到 iframe 并模拟 AJAX 文件上传 - 它完全是纯 JavaScript,不需要任何库,并且一直支持回到 IE6

【讨论】:

【解决方案2】:

查看 Google Closure 库中的 goog.net.iframeIo 类。这将从表单中获取文件输入元素并将其发布到 iFrame,从而提供相当于 AJAX 体验,即使它不在实际的 XHR 中。

以下是关于如何实现它的 Google 文档的链接:

https://code.google.com/p/closure-library/source/browse/closure/goog/net/iframeio.js#48

【讨论】:

    【解决方案3】:

    最近我一直在研究与谷歌闭包库一起使用的文件上传器。我发现fine-uploader 库是一个好的开始。它不是用闭包库编写的,但它为我提供了基本准则:如果支持,则使用 xhr 上传文件,否则回退以形成帖子到隐藏的 iframe。

    在我的代码中,我实现了两个类:一个使用XMLHttpRequest 上传文件,另一个使用goog.net.IframeIo 的sendFromForm 方法上传文件。

    【讨论】:

    • 感谢@lins 这让我大受鼓舞。我会告诉你这是怎么回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多