Вручную запустить диалог открытия файла с помощью 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, мне не повезло.