总结一下最近用iframe遇到的问题与解决办法:

结构:主页面main.html,里面套用iframe。iframe不能出现滚动条,自适应子页面高度。内容多了滚动条是main.html页面的。

1.  主页面自适应iframe页面的高度

这个问题网上的大部分都是自适应静态iframe页面,而且代码较多,对于动态变化的iframe页面,解决的办法少。

我的解决办法很粗狂:获取iframe页面的高度,在设置父页面iframe标签的高度。兼容性我相信都没问题吧。

iframe页面:

setParentHeight()

function setParentHeight(){
var nowHei=$('body').height();//获取当前页面高度
parent.setIframeHeight(nowHei);//调用父页面设置高度函数
}

主页面:记得设置iframe  scrolling="no"属性,这样iframe就没滚动条了。无边框是设置 frameborder="0"

//设置iframe高度
function setIframeHeight(hei){
$('#m-iframe').height(hei);//m-iframe是ifram的id
}

(1) 这样的处理方式很简单,缺点就是iframe页面高度动态变化的时候,比如加载更多,这时还是需要调用  setParentHeight  函数来再次设置父页面iframe标签的高度。

2. 主页面与iframe页面传值和回调。

(1) 主页面调用iframe页面的函数: 假如iframe页面有个add函数:

$('#m-iframe')[0].contentWindow.add();

    (a) 主页面调用iframe都是通过contentWindow来调用iframe页面的window对象。

  (b) 传值就直接传在调用的函数里面。

(2) iframe页面调用主页面函数

   (a) 就如上面的设置高度一样,通过 parent 就能获取到主页面的window对象。

(b) 传值就直接传在调用的函数里面。

(3)回调。 iframe调用父页面函数,父页面响应之后返回回调的值。例子:

//主页面:
var childCallback=null;
$('.box').on('click',function(){
childCallback(1)
})
function show(callback){
if(callback && typeof callback ==='function'){
childCallback=callback;
}
} //iframe页面:
parent.show(function(statu){
console.log(statu);
})

  (a)当iframe调用,主页面click事件响应之后,iframe页面就会返回回调的值。

     (b) 或者是不用定义变量,直接在调用的函数里面绑定点击事件再回调,不过要注意先取消绑定再绑定,不然会多次触发

3.  iframe的弹窗蒙层需要铺满主页面整个页面。例如:

(1) 我推荐的一种方式就是整个弹窗的内容放到主页面里面,iframe只提供触发显示的js就行了。

(2) 网上有些说iframe标签设置absolute和z-index也能达到iframe页面弹窗在主页面之上。我试过,不是不行,iframe页面里的有些内容也会出现在主页面之上。有时候会导致一些问题。

(3) iframe页面对于怎么响应并回调在主页面里面的弹窗,我第二点已经说明了。我认为弹窗放到主页面这样的处理方式比较好。

4.iframe更改了src之后,不出现后退或者前进按钮

要实现这种情况,就只有每次更改的时候,就新建一个iframe元素并替换原来的iframe,这样浏览器就不会产生history,后退和前进按钮就不会激活了

建议前台页面最好少用iframe来引入页面。但是qq邮箱就是用的iframe,为什么我就想不通了。

iframe 自适应高度、父子页面传值、回调的更多相关文章

  1. jQuery简单实现iframe的高度根据页面内容自适应的方法(转)

    本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下: 方式1: //注意:下面的代码是放在和iframe同一个页面中调用 $("#i ...

  2. js控制父子页面传值(iframe和window.open)

    在html中,window对象代表浏览器中一个打开的窗口,就像我们C/S中做窗体一样,在该页的window对象就是new了一个新的窗体对象. 就像做C/S开发一样,浏览器是一个软件,每一个网页都是它n ...

  3. iframe之间通信问题及iframe自适应高度问题

    下面本人来谈谈iframe之间通信问题及iframe自适应高度问题. 1. iframe通信 分为:同域通信 和 跨域通信.所谓同域通信是指 http://localhost/demo/iframe/ ...

  4. 真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变

    今天有朋友问到我关于"iframe自适应高度"的问题,原本以为是很简单的问题,没想到折腾了20分钟才搞定.期间遇到几个问题,要么是高度自适应了,但是当窗口改变时会出现滚动条.也就是 ...

  5. jquery iframe自适应高度[转]

      经典代码 iFrame 自适应高度,在IE6/IE7/IE8/Firefox/Opera/Chrome/Safari通过测试. 很古老的方法: <iframe src="../In ...

  6. js实现iframe自适应高度

    转自:http://www.jb51.net/article/15780.htm 对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的! 不带边框的iframe因为能 ...

  7. 网页制作技巧:iframe自适应高度

    转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...

  8. iframe自适应高度的多种方法小结

    转自:http://www.jb51.net/article/15780.htm 不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的大小 ...

  9. iframe自适应高度的多种方法方法小结

    对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的  不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 ifram ...

  10. [转载]再谈iframe自适应高度

    Demo页面:主页面 iframe_a.html ,被包含页面 iframe_b.htm 和 iframe_c.html 下面开始讲: 通过Google搜索iframe 自适应高度,结果5W多条,搜索 ...

随机推荐

  1. ssh服务突然连接不了案例总结

    ssh服务突然连接不了案例总结   一台Oracle数据库服务器(Linux版本为Oracle Linux Server release 5.7)今天中午突然出现短暂的ssh连接不上的情况,ssh连接 ...

  2. PowerDesigner 使用教程(很具体,很实用)

    原文地址为:PowerDesigner 使用教程(很具体,很实用) 1.PowerDesigner 使用教程 从今日开始,每天一部分内容,在每个工作日,争取让大家天天都有的看,每天内容不会太多. 有错 ...

  3. Spring MVC 表单校验 (七)

    完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)和hibernate-validato ...

  4. Python__装饰器练习题

    一:编写函数,(函数执行的时间是随机的) import time def timmer(func): def wrapper(*args,**kwargs): start= time.time() f ...

  5. .NET MVC全局异常处理(一)

    目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关的配置,但没有实际做过,以为改下设定就 ...

  6. 【Teradata UDF】中文按字符查找chs_instr

    一.场景描述 数据库为ASCII编码单字节存储,在查询中文时可能会出现错误结果.例如查询like“房”字,会查询出不含“房”,含“朔科”的结果. select * from Tablename01 w ...

  7. window.loaction.href 不自动跳转的问题

    window.location.href无效/不跳转的原因分析   1.源代码: <a href="javascript:void(0);" onclick="mo ...

  8. SkylineGlobe7.0.1版本 支持SQLite(*.sqlite;*.db)数据库

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...

  9. Django组件 之 分页器(paginator)

    --------------------------------------------------------------------------------路虽远,行则将至.  事虽难,做则必成. ...

  10. Python--day04(流程控制)

    day03主要内容回顾 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的 ...