是否可以禁用通过Windows窗体应用程序中的axShockwaveFlash对象加载的swf文件的缓存?
必须使用WindowsBrowser对象来获得该结果听起来有点过分。
PS:是的,我已经尝试在Internet Explorer中禁用整个缓存(强制浏览器每次打开它时加载一个页面),但不知何故flash似乎忽略了这一点。答案 0 :(得分:0)
外面的闪光灯
public override void ExecuteResult(ControllerContext context)
{
DateTime dt = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));
context.HttpContext.Response.Clear();
FileStream fs = System.IO.File.OpenRead("path_to_swf_file");
byte[] BannerData = new byte[fs.Length];
fs.Read(BannerData, 0, BannerData.Length);
context.HttpContext.Response.ExpiresAbsolute = dt;
context.HttpContext.Response.CacheControl = "no-cache";
context.HttpContext.Response.AddHeader("Pragma", "no-cache");
context.HttpContext.Response.Charset = "utf-8";
context.HttpContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.HttpContext.Response.Expires = -1;
context.HttpContext.Response.CacheControl = "no-cache, no-store, must-revalidate";
context.HttpContext.Response.ContentType = "application/x-shockwave-flash";
context.HttpContext.Response.AppendHeader("Content-Disposition", "attachment; filename=...");
context.HttpContext.Response.BinaryWrite(BannerData);
fs.Close();
context.HttpContext.Response.End();
}
内
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest(whatever url);
request.requestHeaders.push(new URLRequestHeader("pragma", "no-cache"));
request.requestHeaders.push(new URLRequestHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT, -1"));
request.requestHeaders.push(new URLRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate"));
loader.load(request);
答案 1 :(得分:0)
您始终可以将当前时间戳(以毫秒为单位)附加到SWF文件的网址。
答案 2 :(得分:0)
我假设你在axShockwave控件中指定了一个HTTP URI。
Shockwave Flash播放器可以在完全下载之前播放SWF文件,最简单的方法是在控件中指定网络地址,但正如您所说,您正在遇到缓存失效问题。
如果SWF文件不是太大(即在几秒钟内完全下载),那么我将使用HttpWebRequest或WebClient下载它,将其保存到磁盘上的临时文件中,然后将其加载到播放器中本地路径。请注意,如果SWF依赖于任何域安全选项,则会破坏SWF(Flash播放器会限制某些操作,除非SWF源自与请求的操作相同的域,如果SWF在本地运行,因为没有域,这显然会中断)。
我能想到的唯一选择(因为我自2003年以来没有使用过Flash ActiveX控件,是的,9年前)是删除,处理,然后重新创建控件 - 但我不知道是否有幕后发生任何持久性缓存。