通信に使うため動的に生成している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';
iframe.src
へのセットのみだと Chrome では動作しましたが、Firefox では iframe.contentWindow.location.replace
の書き換えも必要っぽいです。(これは、URL の書き換えをポップアップしたページの iframe 内から行っているせいもあるかもしれません。)
しかし、完全にページのキャッシュがなくなるのも困るので、公開前にもう少し調査します。こちらはタグに書いてあるとおり、起動時に空の iframe が表示されてくれればそれでいいのですから。
以下によるとだいぶ以前から、キャッシュききまくりみたいですね。
MozillaZine.jp フォーラム - iframe のキャッシュ 投稿時間: 2006年7月13日(木) 14:26