RSS Twitter Facebook

2013/01/31 (2013年01月 のアーカイブ)

IEでFlashプログラムをデバッグする時の罠

私もActionScriptでそんなにガリガリ書いてはいないので、その道のプロからすれば常識なのかも知れないのですが、IEでFlashのデバッグをする時はキャッシュの挙動を理解していないと結構はまります。

ActionScriptのコードを書き直してコンパイルしてリロード、しても何故か直らない。おっかしいなあと色々いじくりまわしている内にいつの間にか直っていて結局何が原因だったのか良くわからない状態になったり、というパターンですね。

要するにFlashプログラムを新しくコンパイルしても古いキャッシュがブラウザに残っているという単純な話なんですけど、じゃあいつ更新されるのかというと...

 (1)IEを起動しなおすと更新されます(ただし後述(8)インターネットオプションがデフォルトの時)
 (2)開発者ツール(F12)で「キャッシュ」-「常にサーバーから更新」が設定されているとリロードするだけで更新されます。
 (3)ただし「常にサーバーから更新」設定はIEを起動しなおすとチェックがはずれてしまいます。
 (4)その他のリロード、CTRL+リロード、F5、CTRL-F5、CTRL-Rなどでは更新されません。
 (5)ただし開発者ツール上でのCTRL-R(「ブラウザキャッシュを消去する」)ならば更新されます。
 (6)「ツール」-「閲覧の履歴」で一時ファイルを消しても更新されません
 (7)Adobeのサイトで案内されている方法「SWFファイルのキャッシュを防ぐ方法」はどれも効きません。(追記:方法の3番目はembedタグじゃなくてobjectタグ側をいじると更新されますが、いずれにしても毎回HTMLを変更する必要があり、あまり実用的ではないです)
  http://helpx.adobe.com/jp/flash/kb/228621.html
 (8)インターネットオプション-全般の閲覧の履歴、インターネット一時ファイルが「Webサイトを表示するたびに確認する」の場合は単にリロードするだけで更新されます。

私が把握しているのはこんな所です。実際のところ更新する方法は結構色々あるんですが、とにかくパターンが入り組んでいるのでちゃんと理解していないと駄目ルートばっかりループしかねないです。特に(4)(6)あたりはやばいですね。

たぶん一番使われるパターンは(1)で確認の時は起動しなおす、という方法ですが何回もやっているとだるくなってきます。開発者ツールの設定もいちいち切り替えるのがどうも面倒。いっそ(8)のインターネットオプションを切り替えておくのが確実ですけど、常用ブラウザとしては駄目でしょうね。

結局(4)のパターンでボタンとかキーとかから一発で消せる方法がない、というのが諸悪の根源な気がします。

特にJavascriptは普通にリロードするだけで最新状態で走りますので、Javascriptメインで使っている人がたまにActionscriptを書こうとした時とかは罠にはまりやすいのではないかと思います。ご注意を(と、自分が散々はまった後で...)

Posted by g200kg : 2013/01/31 14:24:43