Резервная загрузка файла AJAX для Internet Explorer

Я реализовал загрузчик файлов AJAX в HTML5, используя xHR2 и File API для внутреннего проекта. От нас требовалось только поддерживать 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, но поддержка File API отсутствует. Есть ли способ определить, что эти API не поддерживаются? Если я могу обнаружить, что API не поддерживаются, как мне реализовать загрузку файла AJAX для IE?

Я использую библиотеку Google Closure JS, а не jQuery или любую другую библиотеку. Выбор библиотеки изменить нельзя. Пожалуйста, используйте jQuery или что-то подобное в ответе. Однако любые фрагменты кода, использующие jQuery, вполне допустимы.


person Kartik    schedule 04.01.2013    source источник
comment
Т.е. в 10-ке отсутствует поддержка API файлов. Вы можете загружать файлы с помощью xhr в ie10 без каких-либо проблем.   -  person Ray Nicholus    schedule 04.01.2013


Ответы (3)


Недавно я работал над загрузчиком файлов, который будет использоваться вместе с библиотекой закрытия Google. Я нашел библиотеку fine-uploader хорошим началом. Он не написан с библиотекой закрытия, но дает мне основные рекомендации: использует xhr для загрузки файла, если он поддерживается, в противном случае откат для формирования сообщения в скрытом iframe.

В своем коде я реализовал два класса: один использует XMLHttpRequest для загрузки файла, а другой использует метод sendFromForm goog.net.IframeIo для загрузки файла.

person lins05    schedule 05.01.2013
comment
Спасибо @lins, это очень помогло. Я дам вам знать, как это происходит. - person Kartik; 06.01.2013

вероятно, самый простой способ определить, существует ли файловый API, — это

typeof File

В браузере, поддерживающем File API, он должен возвращать объект или функцию — Internet Explorer возвращает undefined

что касается того, как отступить и заставить его работать для всех пользователей

Я использовал этот инструмент https://github.com/valums/ajax-upload, который создает iframe и отправляет загрузку в iframe и эмулирует загрузку файла AJAX - все это чистый javascript, библиотеки не требуются и поддерживаются вплоть до IE6

person Geek Num 88    schedule 04.01.2013
comment
github.com/valums/ajax-upload довольно старый и больше не поддерживается. Он был заменен на github.com/valums/file-uploader, который хорошо поддерживается и довольно активный. - person Ray Nicholus; 04.01.2013
comment
Благодаря @lins05 я смог узнать, как определить, поддерживается ли File API. - person Kartik; 05.01.2013

Взгляните на класс goog.net.iframeIo в библиотеке закрытия Google. Это возьмет элемент ввода файла из формы и отправит его в iFrame, давая эквивалент опыта AJAX, даже если он не находится в реальном XHR.

Вот ссылка на документацию Google о том, как это реализовать:

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

person Technetium    schedule 04.01.2013