iframe的几个常见问题

1.iframe的透明问题

除了IE家族,其他标准浏览器默认iframe是透明的。

对应IE7+ 的浏览器:

加个allowtransparency="true"如下

 

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>无标题</title>
  5. </head>
  6. <body style="background-color:#ccc;">
  7. <iframe allowtransparency="true" src="ifrm.html"></iframe>
  8. </body>
  9. </html>

对应ie6还要设置iframe页面的body背景透明

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>内框架页</title>
  5. </head>
  6. <body style="background-color:transparent;">
  7. 这里是内框架页面。
  8. </body>
  9. </html>

注:如果iframe页面不在同一域下,发现此方法失效。

2.去边框,滚动条等

边框:

除了ie家族,可以使用css的border:none;实现。

ie得需设置iframe的frameborder="no"或者frameborder="0"实现,于是兼容的写法如下:

  1. <iframe allowtransparency="true" src="ifrm.html" style="border:none;" frameborder="no"></iframe>

滚动条:

隐藏滚动条可以用scrolling="no"(此方式兼容所有的浏览器)

  1. <iframe allowtransparency="true" src="ifrm.html" scrolling="no" style="border:none;" frameborder="no"></iframe>

对于ie8,ff3,chrome等,设置框架页的body的overflow:hidden;也可以隐藏滚动条(ie6,7,或者iframe页面对你不可控时不行)。

3.iframe自适应宽高度

注:iframe的默认尺寸是300*150px

方法是在iframe文档的onload加载句柄里做

  1. <iframe id="myifrm" onload="this.height=myifrm.document.body.scrollHeight;" allowtransparency="true" src="ifrm.html" scrolling="no" style="border:none;" frameborder="no"></iframe>

就把iframe里的页面的高度赋值给iframe框架窗口高度。

但这个火狐,认name窗口名,不信可以把id改成name试试,所以,兼容的写法是同时加上name,如:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>无标题</title>
  5. </head>
  6. <body style="background-color:#ccc;">
  7. <iframe id="myifrm" name="myifrm" onload="this.height=myifrm.document.body.scrollHeight;" allowtransparency="true" src="ifrm.html" scrolling="no" style="border:none;" frameborder="no"></iframe>
  8. </body>
  9. </html>

或者不写name也行(ie6,7未测试):

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>无标题</title>
  5. </head>
  6. <body style="background-color:#ccc;">
  7. <iframe id="myifrm" onload="this.height=document.getElementByIdx_x('myifrm').contentDocument.body.scrollHeight;" allowtransparency="true" src="ifrm.html" scrolling="no" style="border:none;" frameborder="no"></iframe>
  8. </body>
  9. </html>

这里再提供一个网上写好的一个函数:

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>无标题</title>
  5. <script type="text/javascript" language="javascript">
  6. function iFrameHeight() {
  7. var ifm= document.getElementById("myifrm");
  8. var subWeb = document.frames ? document.frames["myifrm"].document : ifm.contentDocument;
  9. if(ifm != null && subWeb != null) {
  10. ifm.height = subWeb.body.scrollHeight;
  11. }
  12. }
  13. </script>
  14. </head>
  15. <body style="background-color:#ccc;">
  16. <iframe id="myifrm" onload="iFrameHeight();" allowtransparency="true" src="ifrm.html" scrolling="no" style="border:none;" frameborder="no"></iframe>
  17. </body>
  18. </html>

注意:这里在chrome里,通过file://访问发现不行,但是http://可以,不知道何故。

在onload里处理有个问题,就是无法应对ifrm页面里内容变动引起高度变化,简单说,比如tab页签,2个tab页高度不一样,切换时就有问题了。

在口碑UED博客看到,通过定时执行一下的方法:

  1. window.setInterval("iFrameHeight()", 200);

读者可以看下这篇文章,我没怎么看,抽空看下:-)

http://ued.koubei.com/?p=243

4.iframe页面与包含窗口的互通信

5.连带父子页面刷新问题

 

文章来源:http://xcf007.blog.51cto.com/471707/376271

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值