在项目先是使用了uploadify,后来发现在IE下总会引起程序中的错误.
先说下使用uploadify的这个模块,项目用的是Thinkphp框架,URL解释使用的PATHINFO模式,
请求的页面是一个商品编辑页面,/mgr/goods/edit/24.html(看得懂吧?分组/控制器/方法/参数/后缀).
在edit这个方法里,做了常规判断,如果获取的参数id=24在数据库中查不到,则跳转回请求时的页面同时创建一个session,其中框架里获取session的方法做了点修改:
获取 :session('name', true); //true 的话,拿到这个session当即销毁
如果在数据库中拿不到id=24的数据,则创建session并且跳转会请求时的页面REFERER,模版中识别到有错误提
示的session,则显示
,
可就这一举措,不知道为什么在IE下一访问存在的商品编辑页面下就会提示这个错,百思不得其解..
后来F12捕获了网络请求,才知道是uploadif.swf发起了一个请求,如图:
可以看见,正常情况请求的是带有参数的url,可这货莫名其妙的就去请求这个链接,导致控制器中没有获取到参数而设置session的错误提示..
发现问题后,换了swfupload这个插件,同样也是,原来他们同样都是使用了swfupload.swf这东西,
分别细读了两个插件的文档,也看了插件中的代码,发现没有可以解决这一办法的途径.
因为这一不良请求是Flash程序发起的,那就从swfupload.swf下手,当时我还不知道有源码这东西,
就下了些工具对swfupload.swf进行拆卸,在导出的SWFUpload.as发现了问题所在,在该文件的1080行中:
/* *************************************************************
Button Handling Functions
*************************************************************** */
private function SetButtonImageURL(button_image_url:String):void {
this.buttonImageURL = button_image_url;
try {
if (this.buttonImageURL !== null && this.buttonImageURL !== "") {
//就是下面这一段发起的请求
//this.buttonLoader.load(new URLRequest(this.buttonImageURL));
}
} catch (ex:Object) {
}
}
由于使用的是uploadify,我不需要对这个按钮设置什么背景图,我就直接把这段注释掉了,后来想重新生成.swf才觉得麻烦,找不到途径,对as proj又不懂,最后找到swfupload.swf的google项目,下了源码,修改,builid,ok搞定..