Предотвращение кэширования приложений Flex в браузере (несколько модулей) - PullRequest
8 голосов
/ 19 ноября 2008

У меня есть приложение 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 ]

3 голосов
/ 19 ноября 2009

У меня была похожая проблема, и я поместил SWF-файлы в подкаталог с именем номера сборки. Это означало, что URL-адрес SWF-файлов каждый раз указывал на другое местоположение.

В идеале это должно обслуживаться платформой, но радости нет. Но это прекрасно работает для нас и очень легко интегрируется в наши автоматизированные сборки с Hudson - пока никаких претензий.

2 голосов
/ 09 июля 2010
1 голос
/ 27 мая 2010

вот образец.

  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 - это файл, и он существует в нескольких местах. но, как говорилось в моей публикации, я столкнулся с проблемой другого типа.

1 голос
/ 09 марта 2009

Что я сделал, так это контрольную сумму SWF-файла, а затем добавил ее в свой URL. Остается прежним, пока файл не будет перестроен / повторно развернут. Автоматически обрабатывается несколькими строками PHP-скрипта на стороне сервера

0 голосов
/ 19 ноября 2008

Кэширование выполняется не Flash Player, а браузером, поэтому он не контролируется Adobe. Я думаю, что вы нашли работоспособное решение. Если я хочу избежать кэширования, я обычно добавляю случайное число в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...