2008-11-19 88 views
8

我有一個帶有多個模塊的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作爲其「瀏覽器緩存檢查策略」,我也需要確保我的應用程序能夠正確地重新加載。

回答

0

緩存不是由Flash Player完成的,而是由瀏覽器完成的,所以它不受Adobe的控制。我認爲你已經找到了一個可行的解決方案。如果我想避免緩存,我通常在URL上附加一個隨機數。

+0

正確的,但要找到一個可行的解決方案的心不是他們的控制。主要是我想確保我不會錯過一些內置功能並重新發明輪子。我特別不想要一個隨機數,因爲我希望應用程序在可能的情況下被緩存 – 2008-11-19 19:33:48

1

我所做的是檢查和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

3

我有一個類似的問題,並最終將SWF文件放在名爲內部版本號的子目錄中。這意味着SWF文件的URL每次都指向不同的位置。

理想情況下,這應該是由平臺照顧,但沒有喜悅。但是,這對我們來說非常合適,並且很容易與哈德森的自動化版本集成 - 迄今爲止沒有投訴。

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模板的幾個地方。但正如我的帖子所說,我面臨着另一種類型的問題。

相關問題