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

时间:2008-11-19 01:28:30

标签: flex caching

我有一个包含多个模块的Flex应用程序。

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

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

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

此外,我需要将?version=xxx添加到正在加载的主.swf中。由于这是由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,我也需要确保我的应用程序正确重新加载。

5 个答案:

答案 0 :(得分:3)

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

理想情况下,这应该由平台照顾,但没有欢乐。但这对我们来说非常有效,并且可以很容易地与Hudson集成到我们的自动构建中 - 到目前为止没有任何抱怨。

答案 1 :(得分:2)

答案 2 :(得分:1)

我所做的是校验和SWF文件,然后将其添加到其URL。在重建/重新部署文件之前保持不变。通过几行服务器端PHP脚本自动处理

答案 3 :(得分:1)

这里是样本。

  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-template。 但正如我的帖子所说,我正面临另一种问题。

答案 4 :(得分:0)

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