Кеширование в iframe в Firefox - PullRequest
13 голосов
/ 15 июля 2010

У меня есть элемент iframe со случайным атрибутом scr. Когда я обновляю страницу каждый раз, iframe должен загружать страницу с различными параметрами запроса, основанными на атрибуте src. Но в Firefox, если я пытаюсь загрузить динамический URL в iframe, он всегда выполняется при первом запуске URL, хотя атрибут src изменяется динамически. Параметры запроса также не передаются корректно. Итак, как я могу решить эту проблему?

например:

<?php

$url = "http://localhost/test.php";

$rand_val = rand(1000, 9999);

echo "<iframe name='dynamicload' src='{$url}?rand_val={$rand_val}'></iframe>";

?>

Ответы [ 4 ]

4 голосов
/ 15 июля 2010

У нас была такая же проблема с Firefox, кеширующая iframe src и отключающая кеш на исходной странице, а также страница iframe не помогли.Мы помещаем следующий код (код jQuery) в функцию загрузки iframe:

$(parent.document).find("iframe").each(function() {
    // apply the logic only to the current iframe only
    if(this.contentDocument == window.document) {
       // if the href of the iframe is not same as 
       // the value of src attribute then reload it
      if(this.src != location.href) {
        this.src = this.src;
      }
    }
});
3 голосов
/ 28 декабря 2010

Сообщается как ошибка Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=279048

один обходной путь - сброс SRC iframe: document.getElementById ('iframe_id'). src = 'target_url';

Тем не менее будет два запроса: первый запрос неверен и отменен непосредственно перед вторым запросом, который является правильным.

1 голос
/ 15 июля 2010

Ваш код в PHP выполняется один раз и отправляет содержимое в браузер. Когда вы обновляете страницу, код больше не запускается на сервере, потому что он обслуживается кешем. Таким образом, источник iframe использует одно и то же случайное число.

Чтобы избежать этого, вам нужно отключить кеширование исходной страницы (не iframe). Или вы можете создать случайное число на стороне клиента (используя javascript), чтобы оно каждый раз было уникальным.

0 голосов
/ 28 ноября 2018

Все остальные ответы не работают в моем случае. Поэтому я решил решить проблему, создав динамический iFrame с помощью JavaScript, как описано в этом ответе :

<div id="dynamicload"></div>

<script type="text/javascript">
    var ifrm = document.createElement("iframe");
    ifrm.setAttribute("src", "http://localhost/test.php?rand_val=<?php echo $rand_val; ?>");
    ifrm.style.width = "500px";
    ifrm.style.height = "500px";
    document.getElementById("dynamicload").appendChild(ifrm);
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...