最近遇到個比較古怪的問題:當頁面嵌套多個 Iframe 時會出現 Iframe 里包含的頁面無法看到最新的頁面信息。
初步解決方案,在 Iframe 指向的頁面地址后綴添加一個隨機數或者時間戳。這樣能確保每次在加載頁面時,讓瀏覽器知道它是最新的頁面。說白了就是欺騙下瀏覽器,躲過緩存的災難。(這是從 Stack Overflow 和 CSDN 上找到一個看似可行,能徹底治根的辦法。 )
Sample Code:
通過 JS 產生隨機數,把數據數當成參數傳給頁面地址
<script type="text/javascript"> var randomnumber=Math.floor(Math.random()*100000); document.write('<iframe src="xxxx.aspx?_='+randomnumber+'"></iframe>'); </script>
通過時間戳的辦法
<script> var ts=new Date().getTime() document.write('<iframe src="xxxx.asp?_='+ts+'"></iframe>'); document.write('<iframe src="xxxxxx.asp?_='+ts+'"></iframe>'); document.write('<iframe src="xxxxxxxx.asp?_='+ts+'"></iframe>'); </script>
但這樣現象依舊,實在快崩潰了。我依舊沿着這個方向去找,畢竟 Iframe 產生緩存是根源。既然瀏覽器端用這種方式依舊無法解決。只好從服務器端下手了,突然靈光一現,IIS 貌似有個可以自動保留緩存的機制。
看來距離徹底治根的辦法不遠了。開始進入測試環境的 VM 機,把 IIS 給開起來,一開始有個配置項就吸引我了。 “HTTP 響應標頭”, 因為最最最早在處理這個辦法的時候就是利用 JS 來強制清除瀏覽器緩存(可以參考如下,雖然這個辦法沒根治,但應該有需要這個方法的碼友)。
<META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT= "no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT= "Wed, 26 Feb 1997 08:21:57 GMT">
開始配置 HTPP 響應標頭。
1. 進入 IIS ,找到傳說中的 “ HTTP 響應標頭”,進入 HTTP 響應標頭
2.添加自定義 HTTP 響應標頭
問題終於得到解決..