2010-07-15 50 views
13

我有一個隨機scr屬性的iframe元素。當我每次刷新頁面時,iframe都應該根據src屬性加載具有不同查詢參數的頁面。但在Firefox中,如果我嘗試在iframe中加載動態URL,它總是執行第一次執行的URL事件,但src屬性動態更改。查詢參數也沒有正確傳遞。那麼,我該如何解決這個問題呢?Firefox上的Iframe src緩存問題

如:

<?php 

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

$rand_val = rand(1000, 9999); 

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

?> 

回答

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; 
     } 
    } 
}); 
+0

嘿拉吉夫,你的解決方案完美。感謝您的回覆 – karuh24 2010-07-15 07:48:35

+0

在這個解決方案中,原始URL始終加載第一個,但是...五年前... – Dallin 2015-05-01 15:32:22

1

你的PHP代碼中執行一次,將內容發送到瀏覽器。刷新頁面時,代碼不會在服務器中再次運行,因爲它由緩存提供服務。所以iframe的src使用相同的隨機數。

爲了避免這種情況,您需要禁用原始頁面(而不是iframe)的緩存。或者你可以在客戶端生成隨機數(使用javascript),這樣每次都是唯一的。

+0

我已經禁用了服務器以及客戶端的緩存,但它不起作用。我看到了視圖源,隨機ID正在每次都正確生成,iframe src也正常更改,但$ _REQUEST對象似乎沒有改變。 – karuh24 2010-07-15 07:47:08

3

據報道火狐的一個bug:https://bugzilla.mozilla.org/show_bug.cgi?id=279048

一個解決辦法是重新IFRAME的src: 的document.getElementById( 'iframe_id')。src ='target_url';

仍然會有兩個請求:第一個請求是錯誤的,並在第二個請求正確之前立即取消。

+0

和bug(類似?)仍然存在於41.0.2 ...可憐我無法複製它沒有敏感的客戶端數據:/ – Buksy 2015-10-21 17:13:02

+0

幾乎6年後,今天我升級到FF 48。仍是一個問題! -_- – indextwo 2016-08-25 16:46:41