Flash运行时在使用PLupload的IE8中不起作用

Sna*_*yes 5 javascript jquery file-upload plupload

我在$(function() { ... });体内有简单的javascript函数

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%");
      });
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

错误如下图所示: 在此输入图像描述

http://i.imgur.com/5t0sT.jpg(查看完整尺寸)

我看到文件过滤器存在问题.我在IE8上运行PLUpload.com示例,它适用于Flash运行时.

在其他浏览器上,我的上传器完美运行.此外,我已经为所有浏览器(IE8,FF9,Chrome 16)安装了最新版本的Flash,但问题仍然存在于IE8中.

ISSUE FIXED:不要将uploader对象插入到具有visibility:hiddendisplay:none属性的div中.

Sna*_*yes 5

对于与我有同样问题的每个人:

我有以下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>
Run Code Online (Sandbox Code Playgroud)

该类container创建为对话框

$(function()
{
$(".container").dialog({modal:true, width:400});
});
Run Code Online (Sandbox Code Playgroud)

我们知道DIV是初始隐藏的,因为dispaly:none(当然,您可以autoOpen:false在对话框对象中设置为新选项)并删除样式.

在IE8中(可能在早期版本和更高版本中),如果div隐藏了上传器,则无法很好地实例化.(返回上述错误)

在Chrome和Firefox(我不在Opera中测试这个问题)工作正常.

所以,我的建议是避免隐藏块(即使你想创建模态对话框).

我从该div中删除了display:none样式和dialog对象,现在在IE8中工作得非常好.

为什么?我不知道为什么在IE中,对象的实例不是在页面启动时创建的,尽管在Firefox和Chrome中,实例是正常创建的.