firefox返回時iframe的顯示bug的解決方法_經驗交流
<script type="text/javascript">//<![cdata[ if(getcookie('firefoxiframe')){ document.write('<p id="addad"><a href="cookie.html">点击这里删除这个iframe</a></p>'); document.write('<iframe height="120" width="300" marginheight="0" marginwidth="0" frameborder="0" src="nadpre.swf"></iframe>'); }else{ document.write('<p id="addad"><a href="cookie.html">点击这里增加一个iframe</a></p>'); } //]]></script>
打開bug演示,由於cookie不存在,顯示的三個flash都是透過iframe實現的
點擊“點擊這裡增加一個iframe廣告”,跳到一個新的頁面寫入名為firefoxiframe的cookie
點擊“返回”或瀏覽器的返回按鈕,回到bug演示頁面,發現iframe裡面的flash錯位,也就是位置2的iframe連結的flash並沒有載入,顯示的是位置3的flash,位置3的顯示的是位置4的flash,位置4的flash卻依舊存在。
關閉標籤頁(不是關閉整個瀏覽器,如果關閉整個瀏覽器cookie也失效)或新開啟一個標籤頁重新載入該頁面,4個iframe正常顯示4個flash
此時如果點擊“點擊這裡刪除這個iframe廣告”,跳到新頁面刪除cookie,返回也發現iframe中的flash錯位
如果寫入cookie或刪除cookie時,不透過瀏覽器的返回,直接透過網址訪問,則不會出現錯位
簡單分析和解決方案
似乎firefox返回時,javascript重新執行了,但是iframe並未依據src屬性重新載入,而是給iframe和src以類似編號似的配對,而由於返回時javascript的執行,導致iframe多了一個(或少了一個),這就導致後面的配對錯位。
以上僅為猜測,但這的確是firefox(2.0.0.3)的一個bug,ie返回時javascript重新執行,並且iframe的依據src重新載入,opera返回時javascript不重新執行,頁面沒有變化。
解決方案是在文字中增加一個隱藏的iframe來佔位,上面程式碼修改如下程式碼如下:
document.write('<p id="addAd"><a href="cookie.html">点击这里增加一个iframe</a></p>'); //把上面的代码修改成为 document.write('<iframe src="#" style="display:none;"></iframe>'); document.write('<p id="addAd"><a href="cookie.html">点击这里增加一个iframe</a></p>');
以上就是firefox返回時iframe的顯示bug的解決方法_經驗交流的內容,更多相關內容請關注php中文網(www.php.cn)!