Я сделал простой плагин для загрузки изображений, используя скрытый iframe. По сути, он заменяет диалоговое окно файла ссылкой, щелкнув по этой ссылке, можно открыть диалоговое окно файла, а после выбора файла загрузить его автоматически.
Это прекрасно работает в Chrome, Safari и Firefox. К сожалению, все версии IE, включая 9, отказываются отправлять файл. Диалоговое окно файла отображается очень хорошо, и если я сообщаю о значении, оно показывает выбранный файл, но событие отправки, очевидно, не сработает. Если я выберу файл с диалоговым окном реального файла, он будет работать, как и ожидалось, даже отправит файл, не нажимая кнопку отправки или что-либо еще.
Включен только соответствующий код для выполнения задач, очевидно, есть код для штук плагина jQuery и т. Д.
var self = this;
var randId = Math.floor(Math.random()*1001);
var iframeHTML = '<iframe id="iframe'+randId+'" name="iframe'+randId+'" style="visibility:hidden;height:1px;width:1px;"></iframe>';
var formHTML = '<form method="post" enctype="multipart/form-data" encoding="multipart/form-data" action="'+settings.action+'" target="iframe'+randId+'" id="form'+randId+'" >';
var inputHTML = '<input type="file" name="upload" id="input'+randId+'"><input type="submit" id="submit'+randId+'" value="Submit" />';
$(this).append(iframeHTML+formHTML+inputHTML+'</form>');
$('input#input'+randId).change(function() {
if($(this).val() != '') {
if(settings.spinner != '') {
$(settings.spinner).show('fade');
}
}
$('form#form'+randId).submit();
});
$(settings.activator).click(function(e) {
e.preventDefault();
$('input#input'+randId).trigger('click');
});
settings.activator - ссылка, используемая для открытия диалогового окна файла.
Нужна ли мне какая-то особенная вещь для IE, чтобы это работало? Я знаю, что это должно быть возможно, потому что другие сценарии делают это, но я не слишком заинтересован в том, чтобы использовать их, потому что для моих нужд большинство из них слишком массивны и содержат множество функций. Я также не хочу использовать какие-либо решения на основе Flash.
РЕДАКТИРОВАТЬ: В настоящее время я решил эту проблему, просто показав поле ввода файла в IE и сделав соответствующие браузеры, как описано выше. Я все еще хотел бы услышать, есть ли реальные решения кроме взлома "скрытого поля ввода поверх прозрачности" для IE.