2014-01-29 75 views
0

我和這個問題的作者有完全一樣的問題:Preventing iframe caching in browser - 我的iframe中的url被緩存。我在我的頭文件中請求了一些矯枉過正的反高速緩存策略,Fiddler顯示了youtube視頻(iframe中的頁面)也沒有被緩存,只是每當我使用iframe重新加載頁面時,URL都是一樣的。防止在沒有JavaScript的iframe中進行URL緩存

有什麼不同?可能適用的鏈接問題的答案假設iframe是由JavaScript動態構建的。但是,我將iframe作爲一個普通的靜態HTML,只是通過php動態插入了少量參數。通過JavaScript實現整個網站的這一功能(這不是很大)可能是一種解決方法,但我寧願堅持使用php/html。

因此:是否可以防止在沒有JavaScript的iframe中緩存URL?如果是,如何?

編輯 - 我的代碼:

提琴手顯示:

主持人:www.youtube.com
網址:/embed/M7lc1UVf-VE?enablejsapi=1&origin=http://example.com
緩存:無緩存;過期時間:Tue, 27 Apr 1971 19:44:06 EST
緩存我網頁上的外部頁面:no-store, no-cache, must-revalidate, post-check=0, pre-check=0; Expires: Thu, 19 Nov 1981 08:52:00 GMT

如果需要,請求其他字段。

通過的Fiddler顯示的URL是我在那裏第一次,當我從YouTube Player API(第二碼塊中的鏈接,在那裏示出的iframe中普通的HTML複製的iframe模板的URL。

我高速緩存相關的報頭(在.htaccess):

Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 

而且在元:

<meta http-equiv="pragma" content="no-cache" /> 
    <meta http-equiv="cache-control" content="no-cache" /> 

在提琴手顯示的截止日期建議我連訂購更多反緩存標題when I though I had a caching problem。這在理論上可能會導致問題的產生,儘管這似乎不太可能。

還有一些可能相關的信息:我在我的網站上有另一個iframe,它的工作方式應該如此,除了Google地圖常用的功能外,沒有緩存。此工作內聯框架的代碼:

if(isset($kml)) { 
    $adr = 'https://maps.google.com?q='.$kml.'&amp;ll='; 
    } else { 
    $adr = 'https://maps.google.com?ll='; 
    }  
    $adr .= $lat.','.$lon.'&amp;z='.$zoom; 
    $adr .= '&amp;t=h&amp;output=embed'; 
    echo '<iframe class="mapa" src="'.$adr.'"></iframe>'; 
+0

您可以在每次加載時在網址末尾添加一個隨機獲取字符串,以誘使瀏覽器將其視爲不同的頁面。 – cmorrissey

+0

@ChristopherMorrissey:我試過這個,甚至插入一個完全不同的地址,甚至不同的域名。提琴手仍然顯示請求相同的地址。 –

+0

也許如果你顯示你的代碼,有人會看到需要做一些不同的事情。 – TecBrat

回答

1

我很困惑,但很高興 - 它現在有效。 iframe被困在星期三(當我問)和昨天早上。然後我幾乎整天評論它。當我今天(2014年1月31日)取消評論時,它就可以了 - 我現在可以自由切換網址。

問題已解決。我不是很確定,但我認爲它是Firefox bug 356558。由於多年來一直沒有解決,所以我想這不是一個簡單的解決方案,而且我發現了一個解決方法來等待緩存消失。無論如何,我現在不會接受任何答案,因爲可以有更快的非JavaScript解決方法,可以幫助其他人解決同樣的問題。

+0

Firefox是您發佈的問題上的標籤,但我沒有看到它說這個問題是Firefox獨有的,而不是其他瀏覽器。是這樣嗎?您的問題只發生在Firefox瀏覽器中,而不會發生在Chrome或IE等其他瀏覽器上? – JohnH

1

嘗試添加一個expires標頭設置爲-1。這會在頁面從服務器發送後失效,導致瀏覽器緩存無效。您還應該設置正確的Pragma緩存標頭。