文件上传控件plupload的runtimes问题整理(html4、silverlight)

来源:互联网 发布:淘宝不能使用图片搜索 编辑:程序博客网 时间:2024/06/06 04:25

        从很早之前就出现的silverlight 控件的问题,因为不知道是什么原因,没有去跟踪,到客户提出问题以后才开始正视这个问题,因为不得不去修改了,这样真的不好。

具体说说这个问题吧:

       使用的是plupload控件用于文件上传,他可以支持多种ruuntimes:html5、silverlight、flash、html4。

       遇到的问题:当低版本浏览器识别到使用silverlight时,会跳出安装控件,提示框,实际此控件已经安装过。

        经过跟踪发现,我的使用方法是在加载common.Js时就将upload控件初始化了。但是初始化时是可用的状态,大概3-5s后,该uploder的页面结构又恢复为不可用的结构。所以在3-5s内点击上传是可用的,但是在之后点击上传的话,就会要求需要下载控件。

        接下来是判断的过程:初始时判断是控件初始化了2次,第二次出现一些错误,导致控件不可用,弹出下载提示。但是检查代码发现并没有相关的初始化。于是师父提醒,说看看官网上是不是有相关的bug,看是自己的问题还是控件的问题。去官网,在例子中有使用不同的控件来运行上传控件的例子,发现其中单纯的silverlight和flash也有类似的问题,于是判断为控件的bug。

解决方案:想要在低版本中使用html4作为runtime,避免加载的问题。

        可是新的bug出现了:在IE中,点击运行html4的控件的上传按钮,发现页面没反应,并未弹出选择文件的框体,但是在ff和chrome中是正常的。

        这次的bug是只在IE中出现的,所以将官网中运行html4的例子拿到IE中,发现是可以正常使用的。于是又想到是不是自己使用的各种js、初始化的代码出现了问题,于是将相关的js、css和html代码copy出来,在本地运行了一个demo,发现也是没有问题的。

        这个时候就迷茫了,不知道是哪里出了问题。

        然后就是又纠结了一天的时间,不知所措……

        今天早上来了向同事寻求技术支持,然后他用英文搜索了一下,网上确实有英文的相关讨论,发给我以后,然后大家有相关的解决方案。有人说是display:none的问题,在silverlight中将初始改为显示,发现仍然不可用。然后又看到一人的解决方案,有人留言说是帮他解决了问题,照它的代码报错了,但是他的思路是将uploader刷新一下。于是突然想到,是不是可以在点击上传的时候再开始对uploader进行初始化,这样就避开了那3-5s的时间,直接就显示了。然后将问题解决了,顺便测试了一下,都是ok的~很奇怪,没有想象的那么激动,感觉只是避开了问题,没有找到核心。

       但是接下来又和同事聊,发现有人说是display:none的问题,又想到了,如果在那3-5s间将uploader展示,确实是能够正确显示的!!于是在我本地的demo测试了一下,是的!!!如果通过按钮来展现uploader容器,展现出来以后的上传按钮在IE下是不可用的。

至此,对问题的整体算是有了一个比较清晰的思路:

使用silverlight:在初始化后3-5s内将uploader的display设置为block,能够正常使用,否则控件不能使用。

使用html4:通过按钮控制容器展现后,在IE任何版本下,add files 按钮都不能弹出选择文件的框体,在ff和chrome下正常。

好了,现在开始准备解决:

       因为页面的需要,初始是不能将上传控件页面展示出来的,这样太难看了,使用使用html4就排除了,那么silverlight,不能要求用户初始化后3-5s内立刻点击。那么只能我控制。现在的初始化是在进入系统后立即进行的,那么就可以转移到用户点击上传开始初始化,同时展现uploader的容器~

OK,至此,问题算是很清晰的解决了。

这个bug算是花费了我2天的时间,总结起来,遇到问题要努力去寻找问题的根源,在这方面自己确实做的不足,以后要改正了,同时,英文搜索资料真的比中文的多啊。有时候遇到问题,可能只是一个点,你需要的只是一个提醒(可能是我脑子不够灵活,想的还是不够过,需要提醒)。

加油~↖(^ω^)↗

0 0