Вручную запустить диалог открытия файла с помощью plupload
Я использую plupload для масштабирования изображений клиентов до их загрузки. Мне нравится эта функция, которая изящно возвращается к html4, если у пользователя нет установленных флеш файлов, установленных в Silverlight и т.д.
Я хочу иметь возможность запускать загрузку, когда пользователь нажимает на определенные элементы на странице, и я хочу обрабатывать события (иногда останавливая открытие диалогового окна файла). На самом деле я хотел бы открыть диалог файла с помощью javascript.
Хорошо, поэтому HTML4 (или, скорее, браузер, кроме chrome: P) не позволит мне сделать это, если пользователь не нажимает кнопку просмотра (или наложение, закрывающее кнопку просмотра), поэтому, когда я получаю назад к HTML4, я соглашусь, что я не могу этого сделать, но у большинства пользователей будет установлен flash или silverlight, и у них нет этого ограничения. Поэтому мой вопрос таков:
Как я запускаю диалог открытия файла в plupload (имея в виду, что мне нужны только вспышки и процессоры Silverlight).
Ответы
Ответ 1
Если кто-то ищет решение HTML5, вот оно:
var up= $('#uploader').pluploadQueue();
if (up.features.triggerDialog) {
plupload.addEvent(document.getElementById('idOtherButton'), 'click', function(e) {
var input = document.getElementById(up.id + '_html5');
if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
input.click();
}
e.preventDefault();
});
}
Ответ 2
Первые решения не работали на iPhone с plupload 2.1.2.
Следующий код выполнил трюк (требуется jquery):
$("#id_of_the_second_button").click(function() {
$('div.moxie-shim input[type=file]').trigger('click');
});
Ответ 3
Время простоя будет неактуальным по мере прохождения времени. Это означает, что рано или поздно мы все будем использовать HTML5 runtime. Если вы используете HTML5 runtime, но не используете pluploadQueue()
, это также будет работать:
// Set up and initialise uploader
var uploader = new plupload.Uploader({
'runtimes' : 'html5',
'browse_button' : 'id_of_the_first_button'
// Other options
});
uploader.init();
// Hook in the second button
plupload.addEvent(document.getElementById('id_of_the_second_button'), 'click', function(e) {
var input = document.getElementById(uploader.id + '_html5');
if (input && !input.disabled) {
input.click();
} // if
e.preventDefault();
});
Ответ 4
Ok. Это не представляется возможным, поэтому, если кто-то не реализует обработчики событий для элементов silverlight и flash, мне не повезло.
Ответ 5
Я прочитал вашу проблему.
Я нашел несколько статей, которые могут помочь понять это. Проверь их. Это может помочь...!
01. /info/16583/in-javascript-can-i-make-a-click-event-fire-programmatically-for-a-file-input-element
02. /info/24116/open-file-dialog-box-in-javascript