当前位置: 首页 > 图文教程 > 网页制作 > CSS样式表 > Firefox返回时Iframe的显示Bug的解决方法

CSS样式表
css 块状元素和内联元素
CSS 盒模型、块状元素与内联元素、CSS选择器
css 浮动 理解Float的含义
CSS 清除浮动Clear
CSS 制作网页导航条(上)
CSS 制作网页导航条(下)
css 浮动(float)页面布局
css 浮动(float)页面布局(下)
css position 定位
css 定位应用实例
CSS Hack 有关浏览器兼容方面
css 单图片按钮实例(css 图片变换)
使用X-UA-Compatible来设置IE浏览器兼容模式
div overflow 超出隐藏属性使用说明
CSS 使用规则总结
div+CSS 兼容小摘
CSS的inherit与auto使用分析
如何组织和注释CSS文件
CSS样式按整洁易懂的结构组织
CSS Prism 查看和编辑CSS中用到的颜色

CSS样式表 中的 Firefox返回时Iframe的显示Bug的解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 108 ::
收藏到网摘: n/a

一个页面有4个Iframe来显示flash内容,其中第二个iframe的显示是用Javascript控制的,只有当特定的cookie存在时才出现,否则显示普通的文本。 <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>');