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>');
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
-
-
-
-
CSS中的四种定位区别详解
我们都知道,前端开发里面的css中常用的定位方式有普通定位,相对定位,绝对定位、固定定位定位这四种。但是很多零基础的前端小白都不知道这4种定位方式都有什么作用和...
[阅读全文]
-
-
-
-
网友评论