关于iframe问题

来源:互联网 发布:上证历史交易数据 编辑:程序博客网 时间:2024/05/17 23:36
今天在一个项目中迫不得已要用到iframe,针对它显示碰到了很多头疼的问题,也找了不少资料,网上说的也都很全,不过个人为了方便个人记忆也为了今后的翻阅整理下。其实好久没写博客了今天随便过过手瘾吧呵呵!

项目架构描述:

这个项目由于是其他合作伙伴架构的,他们把每个弹出层都是以一个单独的页面做好呈现,现在需要将这每个单独页面都作为弹出层在主页展示,同时触发弹出层的区域为area热点区域!

碰到的问题:

一、iframe自适应高度取值延时,其所取值均为上次iframe加载的内容高度;

二、iframe加载内容在IE6中空白不显示;

解决思路及方案:

一、对于iframe自适应,我们一般最常做的方法就是取“window.frames[0].document.body.scrollHeight”的固定高度然后赋值给iframe,之所以会出现延时是因为内容加载过程中,内容加载完毕了,高度获取的却仅仅只是最初的一次值然后赋值完毕,所以会出现高度加载一半之类的问题,对于这类问题很多人用的是定时器,我的做法是直接去取iframe的onload事件来重置高度,不过对于iframe的onload在IE中它却不怎么肯承认,这个时候只需要用attachEvent给它注册个就好了(其实这些方法网上有很多例子)具体如下:
//autoHeight            function autoH(){                newFrame.style.height = window.frames[0].document.body.scrollHeight + 'px';            }            if(newFrame.attachEvent){                newFrame.attachEvent("onload",autoH);            }else{                newFrame.onload = function(){                    autoH()                }            }




PS:对于此问题还有两点要注意下,第一个是就是iframe的src传值的缓存问题,对于此问题,我们只需要在传值时添加时间产参数即可,如:newFrame.src = "pop" + (s+1) + ".html?=v"+new Date().getTime();当然这里碰到这样问题的几率很小不过个人建议加上参,第二个要注意的就是这里的iframe最后都去动态的create。

二、iframe加载了src后在IE6中一片空白的基本上都是a链接引起来的,因此只需要在a的onclick后return false即可,因为a的onclick中事件处理函数中没有返回false,来阻止浏览器转到href所指向的地址,而造成的页面加载其他页面或者 ajax请求 被abort(忽略)掉而引起的。

PS:对于此问题大家一定要注意了a本身就是用来做链接跳转的不要过分的拿过来做onclick事件,当然有些特殊情况如果做的话一定记得要return false!这个问题多亏了blueidea的帮助,有兴趣的可以看下原文去:http://bbs.blueidea.com/thread-3011637-1-1.html

 

 

 

 

 

 

 

 

 

 

原创粉丝点击