2011-02-10 215 views
6

更改托管Flash应用程序的域名后,我应该更改crossdomain.xml文件。 crossdomain.xml托管在api-server上,由flash应用程序使用。我看到Flash使用浏览器缓存中的crossdomain.xml。有没有什么窍门让Flash无法从缓存中获取crossdomain.xml?也许有任何参数,我可以在对象标签调用期间传递给闪存?crossdomain.xml防止缓存

回答

5

讨厌的问题 - 毫无疑问。

首先:我喜欢缓存 - 只要我在控制之中。 这就是我如何获得对crossdomain.xml缓存的控制:

假设我们有一个需要来自不同服务器的输入的Flash应用程序。 在我的情况下,我们有这样的配置作为Flash变量dataSrc=http://www.company.com/data/calendar.xml

所以闪光灯寻找 www.company.com/crossdomain.xml ......这是加载一次,不是从用户的浏览器缓存中获取,直到他手动刷新它。

的解决方案是在改变的crossdomain.xml IST取自子域:

确保,即例如noCache.company.com/company.com的DocumentRoot(!)。 Flashvar被修改为dataSrc=http://noCache.company.com/data/calendar.xml。事实上,你正在寻找和以前一样的文件。

Flash正在查找noCache.company.com/crossdomain.xml现在将从服务器中取出,因为该uri没有缓存文件。

这取决于你的幻想......如果你允许子域像noCache_ {} numeric_value,你可以很容易地通过访问http://noCache_ {} WEEK_OF_YEAR .company.com /数据/ calendar.xml处理自己的TTL ...

每次crossdomain.xml发生更改时,您还可以增加该数值。

-3

我将直接在浏览器中直接重新加载(F5或CTRL/CMD-F5)crossdomain.xml文件,直到看到它发生更改。只需在浏览器中输入跨域文件的URL并继续刷新即可。另外我会清理浏览器缓存。

你应该试试Firefox和firebug,它会告诉你下载的文件是否被缓存。

http://getfirebug.com/

祝你好运, 罗布

+0

thanx的答案,但我不是谁愿意看到现场工作的唯一的人。还有很多其他人想要使用它。假设我不能直接使用他们的浏览器重新加载crossdomain.xml) – Dao 2011-02-10 10:53:42

0

我随机数字追加到XML文件的末尾,如果我不希望他们缓存 如。 var myXMLURL:String =“myXML.xml?r =”+ Math.random()* 1000;

浏览器将其视为另一个文件,例如。 myXML.xml?r = 645/myXML.xml?r = 239

我不确定这是否适用于crossdomain.xml文件,但应该值得快速尝试。

+3

据我所知,`crossdomain.xml`被Flash的内部机制调用。如果你知道如何影响这个请求,并添加到它的参数,请分享。 – Dao 2011-02-11 19:17:28

+3

默认情况下,Flash会在域的底部请求一个crossdomain.xml,但您可以通过调用Security.loadPolicyFile(str:String)来设置它。 http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/Security.html#loadPolicyFile() – 2011-02-14 20:29:18

1

使用以下Apache指令指定缓存策略的文件:

<Directory /var/www/mysite> 
    <FilesMatch "crossdomain.xml"> 
    Header set Cache-Control "max-age=86400, public, must-revalidate" 
    </FilesMatch> 
</Directory>