SWFUpload通过加载影片并执行相关代码完成上传按钮绘制。仔细研究下脚本终于找到了问题。
JavaScript Code2 3 4 5 6 7 8 9 10 11 12 13 | //Private:getFlashHTMLgeneratestheobjecttagneededtoembedtheflashintothedocument SWFUpload.prototype.getFlashHTML=function(flashVersion) { //FlashSatayobjectsyntax:http://www.alistapart.com/articles/flashsatay return[',this.movieName,'"type="application/x-shockwave-flash"data="',(this.support.imageResize?this.settings.flash_url:this.settings.flash9_url),'"width="',this.settings.button_width,'"height="',this.settings.button_height,'">', ',this.settings.button_window_mode,'"/>', ',(this.support.imageResize?this.settings.flash_url:this.settings.flash9_url),'"/>', '', '', '+this.getFlashVars()+'"/>', ''].join(""); }; |
可以看出通过以下表达式进行Flash影片URL地址的切换:this.support.imageResize?this.settings.flash_url:this.settings.flash9_url
其中this.support.imageResize的初始化包含中方法loadSupport中:
JavaScript Code2 3 4 5 6 7 8 9 | //InitializesthesupportedfunctionalitybasedtheFlashPlayerversion,state,andeventthatoccurduringinitialization SWFUpload.prototype.loadSupport=function(){ this.support={ loading:swfobject.hasFlashPlayerVersion("9.0.28"), imageResize:swfobject.hasFlashPlayerVersion("10.0.0") }; }; |
备注:
hasFlashPlayerVersion(versionStr)
versionStr(string):所需Flash 播放器的最低版本。通常为三个数字的组合,如:"9.0.18",判断Flash 播放器是否达到要求版本号。返回 true或 false。
getFlashPlayerVersion()
获取 Flash 播放器的版本号,返回类型为 object,内容为:{major:n,minor:n,release:n}其中可以省略次要版本号,如:"9.0.0"可以直接写为 "9"。
实际上,当满足高版本应该切换到swfupload_fp9.swf。而这里表达式写的有问题。
为了让代码更清晰,在loadSupport方法this.support增加一个version表示主版本号。
JavaScript Code2 3 4 5 6 7 | SWFUpload.prototype.loadSupport=function(){ this.support={ loading:swfobject.hasFlashPlayerVersion("9.0.28"), imageResize:swfobject.hasFlashPlayerVersion("10.0.0"), version:swfobject.getFlashPlayerVersion().major }; }; |
在getFlashHTML重写下表达式将this.support.imageResize替换为this.support.version<</SPAN>9。
JavaScript Code2 3 4 5 6 7 8 9 10 11 12 | //Private:getFlashHTMLgeneratestheobjecttagneededtoembedtheflashintothedocument SWFUpload.prototype.getFlashHTML=function(flashVersion){ //FlashSatayobjectsyntax:http://www.alistapart.com/articles/flashsatay return[',this.movieName,'"type="application/x-shockwave-flash"data="',(this.support.version<</SPAN>9?this.settings.flash_url:this.settings.flash9_url),'"width="',this.settings.button_width,'"height="',this.settings.button_height,'">', ',this.settings.button_window_mode,'"/>', ',(this.support.version<</SPAN>9?this.settings.flash_url:this.settings.flash9_url),'"/>', '', '', '+this.getFlashVars()+'"/>', '安装Flash', ''].join(""); }; |