\r\n\r\n\r\nなども書いてみましたがダメでした。\r\nindex内にscriptを記述できない仕様ですので、iframe内に記述したのですが、ダメでした。\r\n\r\nすみません、どなたかご教示お願いいたします。","answerCount":1,"upvoteCount":0,"datePublished":"2021-05-05T03:00:20.969Z","dateModified":"2022-01-12T10:55:45.698Z","suggestedAnswer":[{"@type":"Answer","text":"```JavaScript\r\nconst date = new Date();\r\nconst url = src_html + '?' + date.toISOString();\r\nconst iframe_element = document.getElementById('iframe_id');\r\niframe_element.src = url;\r\niframe_element.contentDocument.location.reload();\r\n```\r\nこれでどうでしょう?\r\n実験レベルですが、Windows Edgeでは成功しました。サーバーはさくらのレンタルサーバー(nginx + Apache2.4系)です。","dateModified":"2021-05-05T04:19:22.917Z","datePublished":"2021-05-05T03:09:15.128Z","upvoteCount":1,"url":"https://teratail.com/questions/336649#reply-463881","comment":[{"@type":"Comment","text":"reload(true)は、以前は特定のブラウザに限りスーパーリロードが効いていた時代もありますが、\r\n現代では、いずれのブラウザにおいてもスーパーリロードにはなりません。","datePublished":"2021-05-05T03:13:37.471Z","dateModified":"2021-05-05T03:13:37.471Z"},{"@type":"Comment","text":"miyabi_takatsuk さん、そうなんですね。ありがとうございます。\r\nそれを踏まえて、実験でうまくいった策に回答を改訂しました。","datePublished":"2021-05-05T03:45:14.856Z","dateModified":"2021-05-05T03:45:14.856Z"},{"@type":"Comment","text":"試してみましたが、キャッシュが残っていました。\r\nブラウザはChromeです。","datePublished":"2021-05-05T04:01:15.785Z","dateModified":"2021-05-05T04:01:15.785Z"},{"@type":"Comment","text":"そうですか…。ではやはり異なるURLパラメーターを付加して回避するしかないですね。\r\n回答を改訂しました。","datePublished":"2021-05-05T04:21:05.068Z","dateModified":"2021-05-05T04:21:05.068Z"},{"@type":"Comment","text":"ありがとうございます。\r\nやはりキャッシュが残りました。\r\n私の書き方が悪いのかもしれません。\r\nindex内に以下のように記述したのですが、いかがでしょうか?\r\n","datePublished":"2021-05-05T04:48:31.284Z","dateModified":"2021-05-05T04:48:31.284Z"},{"@type":"Comment","text":"1つだけ\r\nconst url = timesale.html + '?' + date.toISOString();\r\nこれは\r\nconst url = 'timesale.html' + '?' + date.toISOString();\r\nかな?","datePublished":"2021-05-05T04:50:44.163Z","dateModified":"2021-05-05T04:50:44.163Z"},{"@type":"Comment","text":"失礼いたしました。\r\nconst url = 'timesale.html' + '?' + date.toISOString();\r\nに書き換えましたが、やはり残ったままでした。","datePublished":"2021-05-05T04:59:06.811Z","dateModified":"2021-05-05T04:59:06.811Z"},{"@type":"Comment","text":"うーん、じゃあ、あとは… ちゃんと \r\n \r\n\r\n\r\n\r\ntest3.html\r\n\r\n\r\n\r\n\r\n\r\n Hello, world\r\n\r\n\r\n\r\nで、Chromeで http://xxx.xxx.xxx/test2.html にアクセスすると、iframe内にHello Worldが表示される。\r\n\r\n次に html3.html の内容を\r\n\r\n\r\n\r\n\r\n\r\n Hello, world 2\r\n\r\n\r\n\r\nに変更してサーバーにアップロードしてChromeで http://xxx.xxx.xxx/test2.html にアクセスする。\r\n=> 表示は変わらない。(キャッシュされている)\r\n\r\nで、test2.html の\r\n\r\n\r\n\r\nにしてアップロードしてChromeで http://xxx.xxx.xxx/test2.html にアクセスする。\r\n=> Hello, world 2 に表示が変わる。\r\n\r\nもう一度 test3.html の内容を\r\n\r\n\r\n\r\n\r\n\r\n Hello, world 3\r\n\r\n\r\n\r\nに変えて、アップロードして、Chromeで http://xxx.xxx.xxx/test2.html にアクセスする。\r\n=> Hello, world 3 に表示が変わる。\r\n\r\nというわけで、少なくとも私の環境では成功しています。\r\n何が違うんでしょうね。サーバー側の何かかなあ…","datePublished":"2021-05-05T05:25:43.173Z","dateModified":"2021-05-05T05:25:43.173Z"},{"@type":"Comment","text":"何度かやってみたのですが、残っておりましたので\r\nサーバーも確認してみます。\r\nご丁寧に、ありがとうございました!","datePublished":"2021-05-05T07:19:49.327Z","dateModified":"2021-05-05T07:19:49.327Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/iframe","name":"iframeに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/336649","name":"iframe内のキャッシュ無効について"}}]}}}
質問するログイン新規登録

Q&A

1回答

9142閲覧

iframe内のキャッシュ無効について

time_waits

総合スコア15

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

0グッド

0クリップ

投稿2021/05/05 03:00

0

0

前提・実現したいこと

iframe内だけをキャッシュ無効にしたいです。

発生している問題・エラーメッセージ

~.css?210505 や ~.js?210505 など日付を付けると更新されると思うのですが
そうなると毎日?以降の数字を変えなければならないので、それは回避したいと考えています。

該当のソースコード

<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <META HTTP-EQUIV="expires" content="Sun, 10 Jan 1990 01:01:01 GMT"> iframe内に上記を記述してもダメでした。 indexにiframeを設置していますが、iframe以外のキャッシュは有効にしたいので indexには記述していません。

scriptを使えばいいのかと思い

<script> var now = new Date(); document.getElementById("now").innerText = (now.getMonth() + 1) + "/" + (now.getDate()); </script> <script src="timesale.js?p=(new Date()).getTime()"></script>

なども書いてみましたがダメでした。
index内にscriptを記述できない仕様ですので、iframe内に記述したのですが、ダメでした。

すみません、どなたかご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2021/05/05 03:24

iframeの何のキャッシュをクリアしたいのでしょうか? そのページ自体ですか? それとも、読み込んでいるリソースだけですか??
miyabi_takatsuk

2021/05/05 03:25

また、そのiframeページは、 静的HTMLでしょうか、PHPなどの、 サーバーサイドを使用していますでしょうか。
time_waits

2021/05/05 03:55

iframe自体をキャッシュ無効にしたいです。 静的HTMLでPHPなどは使用しておりません。
guest

回答1

0

JavaScript

1const date = new Date(); 2const url = src_html + '?' + date.toISOString(); 3const iframe_element = document.getElementById('iframe_id'); 4iframe_element.src = url; 5iframe_element.contentDocument.location.reload();

これでどうでしょう?
実験レベルですが、Windows Edgeでは成功しました。サーバーはさくらのレンタルサーバー(nginx + Apache2.4系)です。

投稿2021/05/05 03:09

編集2021/05/05 04:19
itagagaki

総合スコア8407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2021/05/05 03:13

reload(true)は、以前は特定のブラウザに限りスーパーリロードが効いていた時代もありますが、 現代では、いずれのブラウザにおいてもスーパーリロードにはなりません。
itagagaki

2021/05/05 03:45

miyabi_takatsuk さん、そうなんですね。ありがとうございます。 それを踏まえて、実験でうまくいった策に回答を改訂しました。
time_waits

2021/05/05 04:01

試してみましたが、キャッシュが残っていました。 ブラウザはChromeです。
itagagaki

2021/05/05 04:21

そうですか…。ではやはり異なるURLパラメーターを付加して回避するしかないですね。 回答を改訂しました。
time_waits

2021/05/05 04:48

ありがとうございます。 やはりキャッシュが残りました。 私の書き方が悪いのかもしれません。 index内に以下のように記述したのですが、いかがでしょうか? <script type="text/javascript"> const date = new Date(); const url = timesale.html + '?' + date.toISOString(); const iframe_element = document.getElementById('iframe'); iframe_element.src = url; iframe_element.contentDocument.location.reload(); </script>
itagagaki

2021/05/05 04:50

1つだけ const url = timesale.html + '?' + date.toISOString(); これは const url = 'timesale.html' + '?' + date.toISOString(); かな?
time_waits

2021/05/05 04:59

失礼いたしました。 const url = 'timesale.html' + '?' + date.toISOString(); に書き換えましたが、やはり残ったままでした。
itagagaki

2021/05/05 05:07 編集

うーん、じゃあ、あとは… ちゃんと <iframe src="timesale.html" id="iframe"> になってます?
time_waits

2021/05/05 05:07

はい、なっています。
itagagaki

2021/05/05 05:25

Chromeでも試してみましたが成功しました。 まずサーバーの.htaccessで <IfModule mod_expires.c> <filesMatch ".(x?html?|php)$"> Header set Cache-Control "max-age=86400" </filesMatch> </IfModule> にしてキャッシュが効くようにしてテストする。 test2.html <!doctype html> <html> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <iframe src="test3.html" id="iframe_id"></iframe> <script> const date = new Date(); const url = 'test3.html' + '?' + date.toISOString(); const iframe_element = document.getElementById('iframe_id'); //iframe_element.src = url; //iframe_element.contentDocument.location.reload(); </script> </body> </html> test3.html <html> <head> </head> <body> Hello, world </body> </html> で、Chromeで http://xxx.xxx.xxx/test2.html にアクセスすると、iframe内にHello Worldが表示される。 次に html3.html の内容を <html> <head> </head> <body> Hello, world 2 </body> </html> に変更してサーバーにアップロードしてChromeで http://xxx.xxx.xxx/test2.html にアクセスする。 => 表示は変わらない。(キャッシュされている) で、test2.html の<script>内でコメントアウトしていた2行の // を消して <!doctype html> <html> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <iframe src="test3.html" id="iframe_id"></iframe> <script> const date = new Date(); const url = 'test3.html' + '?' + date.toISOString(); const iframe_element = document.getElementById('iframe_id'); iframe_element.src = url; iframe_element.contentDocument.location.reload(); </script> </body> </html> にしてアップロードしてChromeで http://xxx.xxx.xxx/test2.html にアクセスする。 => Hello, world 2 に表示が変わる。 もう一度 test3.html の内容を <html> <head> </head> <body> Hello, world 3 </body> </html> に変えて、アップロードして、Chromeで http://xxx.xxx.xxx/test2.html にアクセスする。 => Hello, world 3 に表示が変わる。 というわけで、少なくとも私の環境では成功しています。 何が違うんでしょうね。サーバー側の何かかなあ…
time_waits

2021/05/05 07:19

何度かやってみたのですが、残っておりましたので サーバーも確認してみます。 ご丁寧に、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問