通信に使うため動的に生成しているiframeがFirefoxでキャッシュされまくる問題の対処

iframe の URL を動的に生成して通信を行っていますが、firefox でキャッシュがききまくる、という問題に遭遇して振り回されていた、その解決法です。

まずは症状ですが、ページを起動してある段階でページ内の空の iframe にページを読み込ませます。

続いて、そのページを F5 更新すると、読み込み直後は空であるはずの iframe で、すでに先ほどと同じページが読み込まれています。

この症状は一旦 firefox のタブを閉じて、新たに別のタブを作りURLを指定しなおすと、そのときだけは正常ですが再び F5 更新すると再発します。

以下のページに対処法が書かれていました。日本語では言及が見つからず苦労しました。

FreshSuperCool.com » Firefox caching iframe data:

これによると、以下のようにmetaタグを設定したうえで、

<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

スクリプトで、iframe.src = iframe.src とすることで、問題が解消されるようです。 (空の src で上書きする、ということなので?早い段階で実行させます。)

ガジェットの xml では通常 <head> タグを書きませんが(<body>タグも)、<head>> タグを記入するとそれに会わせて html を生成してくれるみたいです。

私は、<iframe> タグに src="about:blank" も追加しました。

動的書き換え時には、以下のようにします。

iframe.src = 'newURL';
iframe.contentWindow.location.replace = 'newURL';

src のみだと Chrome では動作しましたが、firefox では iframe.contentWindow.location.replace の書き換えも必要っぽいです。(これは、url の書き換えをpopup したページの iframe 内から行っているせいもあるかもしれません。)

しかし、完全にページのキャッシュがなくなるのも困るので、公開前にもう少し調査します。こちらはタグに書いてあるとおり、起動時に空のiframeが表示されてくれればそれでいいのですから。

以下によるとだいぶ以前から、キャッシュききまくりみたいですね。

MozillaZine.jp フォーラム - iframe のキャッシュ 投稿時間: 2006年7月13日(木) 14:26