2011-03-03 15 views
13

Estoy usando plupload para escalar las imágenes del cliente antes de que se carguen. Me gusta la característica de que recae gratamente en html4 si el usuario no tiene instalados los motores flash, silverlight, etc.Activar manualmente el 'diálogo de archivo abierto' usando plupload

Quiero poder iniciar la carga cuando el usuario hace clic en ciertos elementos en la página y quiero manejar los eventos (a veces impidiendo que se abra un diálogo de archivo). De hecho, me gustaría abrir el diálogo de archivo usando javascript.

Ok, entonces HTML4 (o más bien el navegador, excepto chrome: P) no me dejará hacer esto, a menos que el usuario haga clic en un botón de exploración (o una superposición que cubre un botón de exploración), así que cuando llegue la alternativa a HTML4 aceptaré que no puedo hacerlo, pero la mayoría de los usuarios tendrán instalado flash o Silverlight y no tienen esta restricción. Así que mi pregunta es la siguiente:

Cómo desencadenar el diálogo abrir archivo en plupload (teniendo en cuenta que solo necesito los motores flash y silverlight para hacer esto).

Respuesta

4

Si alguien está buscando la solución HTML5, aquí está:

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

Sí, HTML5 es el camino a seguir con los navegadores modernos (Flash, Silverlight y HTML4 son solo tiempos de ejecución alternativos). Como no estoy usando '' pluploadQueue() '', utilicé la instancia de '' plupload.Uploader'' para obtener el ID de la entrada y hacer clic en el botón para obtener el diálogo Seleccionar archivos (respuesta a continuación). – Ilija

1
+0

Ambas soluciones son preocupantes JavaScript/HTML 4 y ni realmente trabajar por la situación que necesito. Sé que mi pregunta es bastante específica, pero solo necesito esta funcionalidad en motores pluploads Silverlight y flash, no en html4 –

2

Ok. No parece posible hacer esto, por lo menos que alguien implementa controladores de evento para los componentes de Silverlight y Flash estoy fuera de suerte

+2

Actually Flash y Silverlight no le permitirán activar el diálogo de archivos mediante programación. Se permite que ocurra solo como reacción a un evento como el clic del mouse (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse()). – jayarjo

+1

@jayarjo: los documentos indican que el método arroja "Error: si el método no se llama en respuesta a una acción del usuario, como un evento de mouse o un evento de pulsación de tecla". No indica si ese evento de mouse o tecla debe estar dentro del control de flash. ¿Alguien sabe si es posible activar la carga al presionar un botón externo? – Mark

5

Los tiempos de ejecución de la inversión se volverán irrelevantes a medida que transcurran los tiempos. Esto significa que, tarde o temprano, todos utilizaremos el tiempo de ejecución de HTML5. En caso de que esté utilizando HTML5 tiempo de ejecución, pero no utiliza pluploadQueue(), esto funcionará así:

// 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(); 
}); 
+0

Encontré alguna referencia a esto y pluploadQueue ... http: //www.plupload.com/punbb/viewtopic.php? pid = 6879 # p6879 – CrandellWS

+0

muy agradable. exactamente lo que necesitaba – robert

14

Las soluciones anteriores no trabajadas en iPhones con plupload 2.1.2.

El siguiente código resolvieron el problema (jQuery es necesario):

$("#id_of_the_second_button").click(function() { 
    $('div.moxie-shim input[type=file]').trigger('click'); 
}); 
+0

Gracias, hombre, esto es lo único que funcionó para mí. – Flezcano

+0

Funcionó para mí también con plupload() _not pluploadQueue() _ aquí está mi problema y el enlace a @estornes respuesta :) – Meloman

+0

excelente, esta debería ser la respuesta aceptada! –

Cuestiones relacionadas