Как стать автором
Обновить

Комментарии 9

Меня вероятно заминусуют, но я пришел в выводу что лучше большие файлы загружать через флеш.

Это даёт следующие преимущества:
— колбек уж точно сработает
— возможноть указать конкретный типа файлов
— возможноть выбирать несколько файлов
— возможноть из показывать как общий прогресс отправки файлов

Есть и минусы:
— для загрузки обязательно наличия Flash плагина и включенного джаваскрипта
Я отчасти согласен с вами.

Однако у меня душа лежит к, так сказать, «первозданным элементам». Если кнопки — то именно кнопки, а не разукрашенные блоки, загрузка файлов — так тоже стандартный элемент, и так далее.

Но, безусловно, не всегда это применимо.
У себя мы делали кнопочку так, чтобы она была похожа на стандартную.
Возможно ли взглянуть на реализацию? Всегда интересны разные варианты решений.
Вот, пожалуйста: repka.tv/upload/ (правда уже я там не работаю, проект живет сам по себе, заброшен перед новым годом)
Мы нашли плагин для jQuery уже с флешкой, модифицировали флешку под наши нужды, поправили кое-что.
Лучше давить на производителей браузеров, чтобы сделали этот элемент более управляемым. Хотя это и не потребуется, похоже что хром поведет всех вперед, задаст направление развития.
в последних версиях FF и webkit-браузеров можно загружать файлы черех XHR с показом прогресса как по каждому так и по всем.

Еще один минул флеша — cookies. У меня куки httpOnly, и JS не сможет их приаттачить к запросу.
плюс, можно делать что-то с файлом на стороне клиента
Тоже работал с плагином jQuery.Forms. И только в Опере есть проблема, когда XML-ответ сервера долго обрабатывается в браузере. Выручало только использование alert, после исполнения которого все начинало работать (т.е. пауза происходила)

По вышеописанному совету посмотрел код файла jquery.form.js (version: 2.47 (04-SEP-2010)).
Исправил строку

if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {


на

if (isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {


и исправил (уменьшил значение) строку

var data, doc, domCheckCount = 10;


После этих исправлений Опера стала сразу возвращать результат в JS. Но все же проходит все 10 циклов (domCheckCount), на меньшее не согласна.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории