knowledge base

マークアップ/フロントエンドエンジニアのWEB制作における備忘録です。平日はWEB屋、休日は社会人劇団の主宰・劇作家をしています。

iframeのキャッシュが強すぎる

iframeで外部HTMLを呼び出す際、iframe内のキャッシュが強すぎて意図しない挙動をすることがあります。

たとえば、同じページのみを呼び出し続ける等。 metaでキャッシュを残さないこともできますが、レギュレーション上できない場合があります。

そんなときの対策をいくつかご紹介します。

呼び出すソースのパスに、ランダムな値を追加する

呼び出す際に、乱数やUNIX時間など、重複する可能性の低い値を追加してiframeのsrcに設定する。

hoge.html → hoge.html?time=123456

ちなみにJavaScriptUNIX時間を求めるのは次のやりかたで。

var date = new Date();
var time = date.getTime();

unloadイベントに何もしない関数を結びつける

これはブラウザの「戻る」ボタン押下時への対応。

「戻る」ボタンによる表示では、loadイベントが走らない場合があり、キャッシュが残るときがあります。

unloadイベントに「何もしない関数」を結びつけることで、強制的にキャッシュを削除するらしい。

$('window').on('unload', function(){});

iframe内だけリロードする

$('iframe').contentWindow.location.reload();

ちなみにreload(true)にするとスーパーリロードになるそうです。

それでもダメなら

src属性に改めて読み込み先を指定。

var src = 'hoge.html';
$('iframe').attr('src', src);