Flex ActionScript 関連覚書などなど

ActionScriptから外部のリソースをロードするには、

1
2
3
4
var uloader:URLLoader = new URLLoader();
uloader.addEventListener(Event.COMPLETE, completeHandler);
var ureq:URLRequest = new URLRequest("http://www.hogehoge.com/resource.txt");
uloader.load(ureq);

普通こんな感じですね。
それで、

1
2
3
private function completeHandler(e:Event):void{
    var resource_txt:String = e.target.data;
}

こんな感じで受け取ります。
ただしコレだとロードしたデータがキャッシュされてしまいます。

開発の途中でキャッシュのせいで予想した結果が返ってこなくて、
無駄な時間をすごしたことも数知れず。

キャッシュしないようにするためには、

1
2
3
4
5
6
var uloader:URLLoader = new URLLoader();
uloader.addEventListener(Event.COMPLETE, completeHandler);
var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
var ureq:URLRequest = new URLRequest("http://www.hogehoge.com/resource.txt");
ureq.requestHeaders.push(header);
uloader.load(ureq);

こんな感じになります。
URLRequestHeaderでpragma:no-cacheというものを渡してあげます。
すると、ブラウザがキャッシュをしなくなります。

ただしIEの場合、
どうも一度アプリケーションを終了するまではno-cache指定していてもキャッシュしてしまう様子です。
[HOWTO] Internet Explorer でキャッシュを無効にする
ここによると、

Pragma: no-cache は、セキュリティで保護された接続で使用された場合にのみ、キャッシュを実行しません。Pragma: no-cache META タグが、セキュリティで保護されていないページで使用された場合、Expires: -1 とまったく同じ働きをします。そのページはキャッシュされますが、直ちに期限が切れるものとしてマークされます。

だそうです。
つまり、no-cacheでもキャッシュされます。なのでリロードしてもキャッシュから読まれてしまいます。
一度アプリケーションを終了すればキャッシュが消えます。
開発時にIEを使っていて、外部のテキストとかを読み込む場合には要注意ですね。
IE使いづらい!

コメント

コメントする