2012-01-04 14 views
5

tengo la función de JavaScript sencillo dentro $(function() { ... }); cuerpode Flash en tiempo de ejecución no funciona en IE8 usando PLupload

var uploader = new plupload.Uploader({ 
     runtimes: 'html5,flash,silverlight', 
     browse_button: 'pickfiles', 
     container: 'uploader', 
     max_file_size: '20mb', 
     unique_names: true, 
     multiple_queues: false, 
     //drop_element: 'dropzone', 
     url: '/Home/Upload', 
     flash_swf_url: '../../../Scripts/upload/plupload.flash.swf', 
     silverlight_xap_url: '../../../Scripts/upload/plupload.silverlight.xap', 
     filters: [ 
       { title: "Image files", extensions: "jpg,gif,png" }, 
       { title: "Zip files", extensions: "zip" } 
      ], 
     chunk_size: '2mb', 
     resize: { width: 320, height: 240, quality: 90 } 
     }); 

     uploader.bind("Init", function (up, params) { 
     $("#runtime").html("<div>Current runtime: " + params.runtime + "</div>"); 
     }); 

     $("#uploadfiles").bind("click", function (e) { 
     uploader.start(); 
     e.preventDefault(); 
     }); 

     uploader.init(); 

     uploader.bind("FilesAdded", function (up, files) { 
     $.each(files, function (i, file) { 
      $('#runtime').append(
       '<div id="' + file.id + '">' + 
        file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>' + 
      '</div>'); 
     }); 
     up.refresh(); 
     }); 

     uploader.bind("UploaderProgress", function (up, file) { 
     $("#" + file.id + " b").html(file.percent + "%"); 
     }); 

     uploader.bind("Error", function (up, file) { 
     $('#runtime').append("<div>Error: " + err.code + 
       ", Message: " + err.message + 
       (err.file ? ", File: " + err.file.name : "") + 
       "</div>"); 
     up.refresh(); 
     }); 

     uploader.bind("FileUploaded", function (up, file) { 
     $("#" + file.id + " b").html("100%"); 
     }); 

y código HTML

<div class="container"> 
        <div>Logo: </div> 
        <div style="clear"></div> 
        <div id="uploader"> 
        <div id="runtime" class="right"> 
         No runtime was found ! 
        </div> 
        <div> 
         <a id="pickfiles" href="#">[Select files]</a> 
         <a id="uploadfiles" href="#">[Upload files]</a> 
        </div> 
        </div> 
       </div> 

Se muestra el error en la siguiente imagen: enter image description here

http://i.imgur.com/5t0sT.jpg (para ver el tamaño completo)

Veo que hay un problema con los filtros de archivos. Ejecuto ejemplos de PLUpload.com en IE8 y funciona bien con Flash runtime.

En otros navegadores, mi cargador funciona perfectamente. Además, he instalado la última versión de Flash para TODOS los navegadores (IE8, FF9, Chrome 16) pero el problema insiste en IE8.

ha solucionado el problema: No inserte objetos de subida en div que tiene visibility:hidden o display:none propiedad.

+0

¿Puede describir mejor la solución? ¿Escribir una respuesta para que las personas vean que se encontró una solución? Tengo un error similar, pero esto no funciona para mí. – oma

Respuesta

5

Para todo aquel que tiene el mismo problema que yo:

tuve el siguiente código HTML

<div class="container" style="display:none"> 
        <div>Logo: </div> 
        <div style="clear"></div> 
        <div id="uploader"> 
        <div id="runtime" class="right"> 
         No runtime was found ! 
        </div> 
        <div> 
         <a id="pickfiles" href="#">[Select files]</a> 
         <a id="uploadfiles" href="#">[Upload files]</a> 
        </div> 
        </div> 
</div> 

La clase container fue creado como diálogo

$(function() 
{ 
$(".container").dialog({modal:true, width:400}); 
}); 

Como sabemos que DIV se oculta inicialmente debido a dispaly:none (por supuesto, puede configurar autoOpen:false como una nueva opción en el objeto de diálogo) y eliminar el estilo

En IE8 (probablemente en versiones anteriores y posteriores), el cargador no se puede crear correctamente si el div está oculto. (Devuelve el error anterior)

En Chrome y Firefox (no pruebo este problema en Opera) funciona bien.

Por lo tanto, mi consejo es evitar el bloqueo oculto (incluso si desea crear un diálogo modal).

Quité el objeto display:none y el objeto dialog de ese div y ahora funciona muy bien en IE8.

¿Por qué? No sé por qué en IE, la instancia de objeto no se crea al inicio de la página, aunque en Firefox y Chrome, la instancia se creó normalmente.

1

Esto resolvió el problema también:

#pickfiles{ 
    display:block; 
} 

o esto:

$('#pickfiles').on("mouseover",function(){ 
       $(".plupload.flash").css({ 
        left:$('#pickfiles').offset().left+'px', 
        top:$('#pickfiles').offset().top+'px' 
        }); 
       }); 
2

después de la div se muestra, haga lo siguiente:

uploader.refresh(); 

tengo prueba en mi página, ¡trabajó!

-1

Instale microsoft silverlight en su sistema. Eso resolverá el problema, y ​​no se olvide de dar un mensaje para que los usuarios instalen silverligth.

-1

Este error se soluciona por:

Añadir "html4" a propiedades: "tiempo de ejecución"

var uploader = new plupload.Uploader({ 
     runtimes : 'gears,html5,flash,silverlight,browserplus,**html4**', 
     browse_button : 'pickfiles_<? echo $tmpKey ?>', 
     container : 'container_<? echo $tmpKey ?>', 
     max_file_size : '30mb', 
     url : '/image/upload3', 
     flash_swf_url : '/plupload/js/plupload.flash.swf', 
     silverlight_xap_url : '/plupload/js/plupload.silverlight.xap', 
     filters : [ 
      {title : "Image files", extensions : "jpg,gif,png,jpeg"}, 
      {title : "Zip files", extensions : "zip"} 
     ], 
     unique_names:false, 
     multipart_params : { 
      "tmpPath" : "<? echo $tmpPath ?>", 
      "minWidth" : "<? if(isset($minWidth)) echo $minWidth; else echo 0; ?>", 
      "minHeight" : "<? if(isset($minHeight)) echo $minHeight; else echo 0; ?>" 
     } 
    // resize : {width : 390, height : 290, quality : 90} 
    }); 

buena suerte para usted !!!