鹰击长空yuetao.org

5月 9

[转]swfupload在ie11下失效 不指定

swfupload是一个不错的文件上传组件,最近参与了一个使用了此控件的项目,测试中发现上传控件在IE8以上浏览器中无法使用,即便Flash加载了,但右键显示“影片未能加载”,百度了一下发现IE9及更高版本的浏览器需要加上classid,flash才能正常执行。

解决方法也很简单,为IE浏览器的Flash代码加上ClassId即可:


 
SWFUpload.prototype.getFlashHTML = function () {
 // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
 var myclass="";
 if(navigator.userAgent.indexOf("MSIE")>0){
     myclass='classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
 }
 
 return ['<object '+myclass+'  id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
    '<param name="wmode" value="', this.settings.button_window_mode, '" />',
    '<param name="movie" value="', this.settings.flash_url, '" />',
    '<param name="quality" value="high" />',
    '<param name="menu" value="false" />',
    '<param name="allowScriptAccess" value="always" />',
    '<param name="flashvars" value="' + this.getFlashVars() + '" />',
    '</object>'].join("");
};
加上后确实解决了IE9\IE10下无法上传的问题,但是在IE11下仍然无法使用,断点跟踪后发现 myclass未被赋值,再次添加navigator.userAgent发现IE11下的userAgent(Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; rv:11.0) like Gecko)中已经没有了“MSIE”,看来上面的解决方案不适用于IE11了,根据源代码我们可以断定只要判断出是IE浏览器即可。

IE11虽然遵循了web标准,但仍然保留了ActiveXObject,所以我们可以通过判断ActiveXObject来确定是否是IE浏览器(关于IE11的细节 http://msdn.microsoft.com/zh-cn/library/ie/dn467845(v=vs.85).aspx)。

最终解决方案如下:

JavaScript

 
SWFUpload.prototype.getFlashHTML = function () {
 // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
 var myclass="";
 if(window.hasOwnProperty("ActiveXObject")){
     myclass='classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
 }
 
 return ['<object '+myclass+'  id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
    '<param name="wmode" value="', this.settings.button_window_mode, '" />',
    '<param name="movie" value="', this.settings.flash_url, '" />',
    '<param name="quality" value="high" />',
    '<param name="menu" value="false" />',
    '<param name="allowScriptAccess" value="always" />',
    '<param name="flashvars" value="' + this.getFlashVars() + '" />',
    '</object>'].join("");
};
Tags:
发表评论

昵称

主页

邮箱

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]