我有一个带有随机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>";
?>
答案 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>