web-dev-qa-db-ja.com

Firefox、iframe、およびリダイレクト

私は何年も前にこの同じ行動に遭遇し、そのとき解決策が見つからなかったときにあきらめました。私は誰かがここで何が起こっているのか、それを解決する方法を知っていることを望んでいます。

Firefoxにiframeを含むページがあり、そのiframeで2番目のサブページにリダイレクトするサブページを読み込むと、「reload /リフレッシュ」。最初のサブページを再度表示する唯一の方法は、ウィンドウ/タブを閉じて親ページを再度開くことです。ページをリロードすると、Firefoxは毎回常に2番目のサブページにジャンプします。これは、親文書の初期iframe URLを後で変更した場合でも発生します。そして、このevenは、URLを変更した場合キャッシュをクリアした場合に発生します。

以前にこの問題に遭遇したとき、それは広告配信に問題を引き起こしていましたが、今回はコンテンツの問題です。誰もがこれに遭遇し、その周りの方法を知っていますか?


[編集]

Iframeの動作をテストするために使用できる3つのファイルを作成しましたが、変更を加えて動作をテストするには、制御するWebサーバーで独自のhtmlページを操作する必要があります。

私が使用しているファイルは次のとおりです。

  1. http://www.fatfx.com/tests/doc1.html-5秒後にdoc2.htmlにリダイレクトします
  2. http://www.fatfx.com/tests/doc2.html-静的ファイル
  3. http://www.fatfx.com/tests/doc2.html-静的ファイル

手順:

  1. HTMLドキュメントを作成し、本文に挿入します:<iframe src="http://www.fatfx.com/tests/doc1.html" width="300" height="300" />
  2. Firefoxをロードします。 This is document one. Redirecting in 5 seconds...が表示され、次にThis is document two.が表示されます
  3. 「リロード」を押します。すぐにThis is document twoが表示されます。
  4. キャッシュをクリアし、「リロード」を押します。すぐにThis is document twoが表示されます。
  5. 文書を編集し、URLをdoc1.htmlからdoc3.htmlに変更します。
  6. キャッシュをクリアして、Firefoxで「リロード」を押します。まだすぐに表示されるはずですThis is document two.ページソースをチェックして、ステップ5からのコード変更があることを確認します。

注:一意のIDを追加してiframeタグを変更しようとしました。それはうまくいきませんでした。 Cache-Control、Pragma、およびExpiresメタタグを追加して、ドキュメントのキャッシュを防止しようとしました。それはうまくいきませんでした。 JSでプログラム的にタグを書き込もうとしました。それはうまくいきませんでした。

私が言うように、私はおそらく3年前にこの行動に遭遇しました。これは「バグ」ではなく、望ましい動作です。しかし、それを回避する方法が必要です。


Edit 2

これはMozillaの既知のバグで、2005年に最初にログに記録されたようです。 Bugzillaレポート ここにあります

誰かが回避策を知っているなら、私に知らせてください、そして、私はこれを答えられたものとしてマークします。

6
Andrew

これを解決する最も簡単な方法は、以下を追加することです:

for each (iframe in document.getElementsByTagName('iframe')) { iframe.src = iframe.src };

onload/pre-onload JavaScriptブロックに。

これにより、他のブラウザに存在する場合でも問題が解決します。

古いバージョンのIE(とにかくこの修正は必要ありません)で静かに失敗させたい場合は、try/catchでラップします。

1
Metalshark