我们在用Flex开发应用的时候,每次修改了swf,上传到服务器后,测试都需要清空缓存。这样很麻烦,另外如果以后版本更新了,但是用户没有清空缓存的话仍然看不到最新版本。所以在这里说一下解决方案。
其实这都是因为缓存的问题,大家都知道,Flash插件也使用与HTML页面类似的方法缓存swf文件,节省我们每次导入swf文件的时间,这是个很好的策略,但是对于我们有新版本swf文件发布的时候,这个缓存的机制就不怎么可爱了,swf中 有没有什么特别的参数可以不缓存,而且对于Flex这样的胖客户端,不缓存对于用户体验也是不利的,这可如何是好?!
还好问题还是有解决的办法的,我们可以从缓存的根本下手,一般缓存都是基于URL的,也就是说对同一个URL的访问,有一个缓存的机制在这里,而对于不同的URL,也就必须读入新的swf重新缓存了。
具体解决方案如下:
1、将嵌入swf的html文件设置为不缓存
修改应用访问的html文件,将这个页面的缓存方式设置为“不缓存”(因为html页面的数据不大,所以每次都读取Server中的内容是可以容忍的)。在此文件的<head></head>之间加上如下代码:
<Meta HTTP-EQUIV="pragma" CONTENT="no-cache"> |
注意:<head></head>之间原有的代码不要修改!,如果代码中已经存在上边的代码就无需再增加了。
2、在嵌入的swf的url后边添加版本号
找到应用的html中嵌入swf的js代码块,实际嵌入swf的js函数为swfobject.embedSWF(url, .....),第一个参数为被嵌入swf的url路径,在每次swf升级时,在路径后边加上版本控制参数即可,即将参数设置为“xxx.swf?v=2014012801”,具体的版本号根据项目约定设置,案例代码的截图如下: