0

是否可以在 Windows 窗体应用程序中禁用通过 axShockwaveFlash 对象加载的 swf 文件的缓存?

不得不使用 WindowsBrowser 对象来获得该结果听起来有点矫枉过正。

PS:是的,我已经尝试在 Internet Explorer 中禁用整个缓存(强制浏览器在每次打开页面时加载页面),但不知何故 flash 似乎忽略了这一点。

4

3 回答 3

0

您始终可以将当前时间戳(以毫秒为单位)附加到 SWF 文件的 url。

于 2012-11-05T20:47:22.960 回答
0

我假设您在 axShockwave 控件中指定了一个 HTTP URI。

Shockwave Flash 播放器可以在 SWF 文件完全下载之前播放它,最简单的方法是在控件中指定网络地址,但正如您所说,您遇到了缓存失效问题。

如果 SWF 文件不是太大(即在几秒钟内完全下载),那么我会使用 HttpWebRequest 或 WebClient 下载它,将其保存到磁盘上的临时文件中,然后通过本地路径将其加载到播放器中。请注意,如果 SWF 依赖于任何域安全选项,这将破坏 SWF(Flash 播放器会限制某些操作,除非 SWF 来自与请求的操作相同的域,如果 SWF 由于没有域而在本地运行,这显然会破坏)。

我能想到的唯一选择(因为我自 2003 年以来就没有使用过 Flash ActiveX 控件,是的,9 年前)是删除、处置,然后重新创建控件 - 但我不知道是否有任何持久缓存在幕后进行。

于 2012-11-05T20:49:10.967 回答
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);
于 2012-11-05T20:18:55.313 回答