近期在開發中遇到一個很奇怪的問題:HTML頁面中有個iframe,初始狀況下是空的,當點擊特定按鈕後iframe會加載特定頁面。javascript
但很快就發現有點問題了:當iframe加載了特定頁面後,此時只要按F5刷新頁面,iframe仍然會顯示剛剛加載過的頁面,而不是初始化時的空頁面。php
但更奇怪的事是:一樣的HTML代碼,只要把文件名改成php(其餘動態語言腳本沒有試過)就不會出現上面的問題,html
另外若是使得Ctrl+F5強制刷新,無論是html和php也都沒有發生上面的問題。java
示例代碼:緩存
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE></TITLE> <script type="text/javascript"> var initFrame = function(){ test.location='http://www.baidu.com'; }; var clearFrame = function(){ test.location='about:blank'; }; </script> </HEAD> <BODY> <pre> 說明: 剛開始iframe並無內容,點擊加載後纔有內容 但此時刷新下頁面,iframe內仍然會顯示加載後的內容 而不是空內容,這時須要增長清除iframe內容的代碼來解決此問題 但時在php程序中,此狀況不會發生,刷新頁面時iframe內容顯示爲空 </pre> <iframe name="test" src="" width=100% height="300px" border=0></iframe> <div> <a href="javascript:initFrame()">加載iframe</a> <a href="javascript:location=location">刷新頁面</a> <a href="javascript:clearFrame()">清空iframe</a> </div> <script> //clearFrame(); </script> </BODY> </HTML>
爲此我作了屢次試驗,總結出結論以下:測試
文件類型\刷新方式 | F5 | Ctrl+F5 | JS location=location.net location.replace(location) |
JS location.reload history.go(0) |
HTML | 異常 | 正常 | 正常 | 異常 |
PHP | 正常 | 正常 | 正常 | 異常 |
測試環境:Win7 64bit IE9/Firefox14
結論:
一、相同的代碼,動態腳本和靜態HTML執行結果仍是有差別的
二、頁面中嵌套iframe在進行頁面可能會有」緩存「(不知道用這個詞是否合適)
三、JS不一樣刷新頁面的方式會有不一樣效果,相似location=location的方式類至關於強制刷新,iframe裏的內容也會初始化;相似location.reload的方式並不會初始化iframe裏的內容,iframe內會保持以前的狀態。
要想讓以上全部的方式都不會有iframe顯示異常的狀況也很好辦,只要增長一段 js初始化iframe的代碼就能夠了
上面示例代碼中
//clearFrame();這一行前面的註釋去掉便可。
另外,iframe也會有其餘一些煩人的問題如:iframe內打開連接問題、跳轉異常問題、JS問題等
因此不少時候iframe並非一個好的方案,最後勸你們一句:iframe有風險,使用前請謹慎。
原創內容,轉載請註明出處