2012-01-04 12 views
5

Mam prostą funkcję javascript wewnątrz $(function() { ... }); ciaławykonawcze Flash nie działa w IE8 za pomocą 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%"); 
     }); 

i HTML kod

<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> 

Błąd jest pokazany na poniższym zdjęciu: enter image description here

http://i.imgur.com/5t0sT.jpg (aby wyświetlić w pełnym rozmiarze)

Widzę, że to jest problem z filtrami plików. Uruchamiam przykłady PLUpload.com na IE8 i działa dobrze z Flash runtime.

W innych przeglądarkach mój uploader działa idealnie. Zainstalowałem też najnowszą wersję Flasha dla WSZYSTKICH przeglądarek (IE8, FF9, Chrome 16), ale problem polega na IE8.

WYDANIE FIXED: nie należy wkładać przedmiotów do przesyłania do div, który ma visibility:hidden lub display:none nieruchomości.

+0

Czy możesz lepiej opisać rozwiązanie? Napisz odpowiedź, aby ludzie zobaczyli, że znaleziono rozwiązanie? Mam podobny błąd, ale to nie działa dla mnie. – oma

Odpowiedz

5

Dla każdego, kto ma taki sam problem jak ja:

miałem następujący kod 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> 

Klasa container został stworzony jako dialogowym

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

Ponieważ wiemy, że DIV jest początkowo ukryty z powodu dispaly:none (oczywiście, możesz ustawić autoOpen:false jako nową opcję w obiekcie dialogowym) i usuń styl.

W IE8 (prawdopodobnie we wcześniejszej i starszej wersji) program ładujący nie może być dobrze utworzony, jeśli div jest ukryty. (Zwraca powyższy błąd)

W Chrome i Firefox (nie testuję tego problemu w Operze) działa dobrze.

Moja rada to uniknięcie ukrytego bloku (nawet jeśli chcesz utworzyć modalne okno dialogowe).

Usunąłem obiekt display:none i obiekt dialog z tego elementu div i teraz działa on bardzo dobrze w IE8.

Dlaczego? Nie wiem, dlaczego w IE instancja obiektu nie jest tworzona przy starcie strony, chociaż w Firefoksie i Chrome instancja została utworzona normalnie.

1

ten rozwiązał problem zbyt:

#pickfiles{ 
    display:block; 
} 

lub to:

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

po div jest wyświetlana, wykonaj następujące czynności:

uploader.refresh(); 

mam test na mojej stronie, pracował!

-1

Zainstaluj microsoft silverlight w swoim systemie. To rozwiąże problem i nie zapomnij dać wiadomość dla użytkowników, aby zainstalować silverligth.

-1

Ten błąd rozwiązany przez:

Dodaj "HTML4" do właściwości: "czasy pracy"

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} 
    }); 

Powodzenia dla Ciebie !!!

Powiązane problemy