在浏览器中防止Flex应用程序缓存(多个模块)

问题描述:

我有一个带有多个模块的Flex应用程序。在浏览器中防止Flex应用程序缓存(多个模块)

当我重新部署应用程序时,我发现模块(作为单独的swf文件部署)正在缓存在浏览器中,并且新版本未加载。

所以我尝试了所有模块加载时加入?version=xxx的古老技巧。价值xxx是实际存储在主机html页面全局参数:

var moduleSection:ModuleLoaderSection; 
moduleSection = new ModuleLoaderSection(); 
moduleSection.visible = false; 
moduleSection.moduleName = moduleName + "?version=" + MySite.masterVersion; 

此外,我需要添加?version=xxx到已加载的主要瑞士法郎。由于这是由HTML做我不得不改变我的AC_OETags.js如下文件来做到这一点:

function AC_FL_RunContent(){ 
    var ret = 
    AC_GetArgs 
    ( arguments, ".swf?mv=" + getMasterVersion(), "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    , "application/x-shockwave-flash" 
    ); 
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 
} 

这是一切优秀和伟大工程。我很难相信Adobe尚未有办法解决这个问题。鉴于Flex正在为企业设计模块化应用程序,我发现它特别令人惊讶。

其他人做什么?即使有人选择once per session作为其“浏览器缓存检查策略”,我也需要确保我的应用程序能够正确地重新加载。

缓存不是由Flash Player完成的,而是由浏览器完成的,所以它不受Adobe的控制。我认为你已经找到了一个可行的解决方案。如果我想避免缓存,我通常在URL上附加一个随机数。

+0

正确的,但要找到一个可行的解决方案的心不是他们的控制。主要是我想确保我不会错过一些内置功能并重新发明*。我特别不想要一个随机数,因为我希望应用程序在可能的情况下被缓存 – 2008-11-19 19:33:48

我所做的是检查和SWF文件,然后将其添加到它的URL。保持不变,直到文件被重建/重新部署。由几行服务器端PHP脚本自动处理

+0

听起来很有趣。我喜欢'一劳永逸'的想法。你在哪里存储/缓存这些校验和?你没有自动重新计算它们,每个页面的请求是你? – 2009-03-10 01:51:25

+0

在我的应用程序中,持有SWF的页面会被加载一次(或者很少出现 - 我之后会执行ajax&flex remoting)。所以在组装页面时计算PHP中的md5校验和并不是什么大问题。我的SWF尺寸小于120K,所以这项工作做得非常快。 ... – 2009-03-10 02:29:13

我有一个类似的问题,并最终将SWF文件放在名为内部版本号的子目录中。这意味着SWF文件的URL每次都指向不同的位置。

理想情况下,这应该是由平台照顾,但没有喜悦。但是,这对我们来说非常合适,并且很容易与哈德森的自动化版本集成 - 迄今为止没有投诉。

这里是示例。

function AC_FL_RunContent(){ 
    var ret = AC_GetArgs(arguments, ".swf?ts=" + getTS(), "movie", 
       "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", 
       "application/x-shockwave-flash"); 
    AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 
    } 

    function getTS() { 
    var ts = new Date().getTime(); 
    return ts; 
    } 

AC_OETags.js是文件,它存在html模板的几个地方。但正如我的帖子所说,我面临着另一种类型的问题。