在firefox上iframe src缓存问题

时间:2010-07-15 07:31:07

标签: iframe

我有一个带有随机scr属性的iframe元素。当我每次都刷新页面时,iframe应该根据src属性加载具有不同查询参数的页面。但是在firefox中,如果我尝试在iframe中加载动态URL,它总是执行第一次执行的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 个答案:

答案 0 :(得分:4)

我们遇到了同样的问题,firefox缓存iframe src并禁用原始页面上的缓存以及iframe页面没有帮助。我们将以下代码(jQuery代码)放在iframe的onload函数中:

$(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;
      }
    }
});

答案 1 :(得分:3)

据报道它是firefox的错误:https://bugzilla.mozilla.org/show_bug.cgi?id=279048

一种解决方法是重置iframe的src: document.getElementById('iframe_id')。src ='target_url';

仍有两个请求:第一个请求错误,并在第二个请求之前立即取消,这是正确的。

答案 2 :(得分:1)

PHP中的代码执行一次并将内容发送到浏览器。刷新页面时,代码不会再次在服务器中运行,因为它由缓存提供。所以iframe的src使用相同的随机数。

要避免这种情况,您需要禁用原始页面(而不是iframe)的缓存。或者你可以在客户端生成随机数(使用javascript),这样每次都是唯一的。

答案 3 :(得分:0)

在我的情况下,所有其他答案均无效。因此,我决定解决该问题,就像在this answer中描述的那样,使用JavaScript动态创建整个iFrame:

<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>