0

Windows フォーム アプリケーションで axShockwaveFlash オブジェクトを介してロードされた swf ファイルのキャッシュを無効にすることはできますか?

その結果を取得するために WindowsBrowser オブジェクトを使用しなければならないというのは、やり過ぎのように思えます。

PS: はい、既にインターネット エクスプローラーでキャッシュ全体を無効にしようとしました (ブラウザーがページを開くたびに強制的にページを読み込むようにします) が、どういうわけかフラッシュはそれを無視しているようです。

4

3 に答える 3

0

SWFファイルのURLには、ミリ秒単位の現在のタイムスタンプをいつでも追加できます。

于 2012-11-05T20:47:22.960 に答える
0

axShockwave コントロールで HTTP URI を指定していると思います。

Shockwave Flash プレーヤーは、ダウンロードが完了する前に SWF ファイルを再生できます。これを行う最も簡単な方法は、コントロールでネットワーク アドレスを指定することですが、おっしゃる通り、キャッシュ無効化の問題が発生しています。

SWF ファイルが大きすぎない場合 (つまり、数秒以内に完全にダウンロードされる場合)、HttpWebRequest または WebClient を使用してダウンロードし、ディスク上の一時ファイルに保存してから、ローカル パスでプレーヤーにロードします。ドメイン セキュリティ オプションに依存している場合、これにより SWF が壊れることに注意してください (Flash Player は、SWF が要求されたアクションと同じドメインから発信されていない限り、特定のアクションを制限します。ドメインがないため、SWF がローカルで実行されている場合は明らかに壊れます)。

私が考えることができる唯一の代替手段は(2003年以来、ええ、9年前にFlash ActiveXコントロールを使用していないため)、コントロールを削除して破棄し、再作成することですが、永続的なキャッシュがあるかどうかはわかりません舞台裏で進んでいます。

于 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 に答える