更改托管 Flash 应用程序的域名后,我应该更改 crossdomain.xml 文件。该 crossdomain.xml 托管在 api-server 上,供 flash 应用程序使用。我看到 flash 使用浏览器缓存中的 crossdomain.xml。有什么技巧可以让 flash 不从缓存中获取 crossdomain.xml 吗?也许有任何参数,我可以在对象标签中调用它时传递给 flash?
4 回答
烦人的问题——毫无疑问。
首先:我喜欢缓存——只要我能控制。这就是我如何控制 crossdomain.xml 缓存:
比方说,我们有一个 Flash 应用程序需要来自不同服务器的一些输入。在我的情况下,我们将其配置为 flashvardataSrc=http://www.company.com/data/calendar.xml
所以flash正在寻找
www.company.com/crossdomain.xml
......它被加载一次,然后从用户浏览器缓存中获取,直到他手动刷新它。
解决方案是更改从 crossdomain.xml 获取的子域:
确保例如(!)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/data/calendar.xml 轻松处理自己的 TTL ...
每次 crossdomain.xml 更改时,您也可以增加该数值。
使用以下 apache 指令为文件指定缓存策略:
<Directory /var/www/mysite>
<FilesMatch "crossdomain.xml">
Header set Cache-Control "max-age=86400, public, must-revalidate"
</FilesMatch>
</Directory>
如果我不希望它们缓存例如,我会将随机数附加到 xml 文件的末尾。var myXMLURL:String = "myXML.xml?r=" + Math.random()*1000;
浏览器将其视为不同的文件,例如。myXML.xml?r=645 / myXML.xml?r=239
我不确定这是否适用于 crossdomain.xml 文件,但值得快速尝试。
我会直接在浏览器中强制重新加载(F5 或 CTRL/CMD-F5)crossdomain.xml 文件,直到我看到它发生变化。只需在浏览器中输入跨域文件的 URL 并继续刷新即可。另外我会清理浏览器缓存。
你应该试试 Firefox 和 firebug,它会告诉你下载的文件是否被缓存。
祝你好运,罗伯