iframe 自适应高度、父子页面传值、回调
总结一下最近用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 自适应高度、父子页面传值、回调的更多相关文章
- jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下: 方式1: //注意:下面的代码是放在和iframe同一个页面中调用 $("#i ...
- js控制父子页面传值(iframe和window.open)
在html中,window对象代表浏览器中一个打开的窗口,就像我们C/S中做窗体一样,在该页的window对象就是new了一个新的窗体对象. 就像做C/S开发一样,浏览器是一个软件,每一个网页都是它n ...
- iframe之间通信问题及iframe自适应高度问题
下面本人来谈谈iframe之间通信问题及iframe自适应高度问题. 1. iframe通信 分为:同域通信 和 跨域通信.所谓同域通信是指 http://localhost/demo/iframe/ ...
- 真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变
今天有朋友问到我关于"iframe自适应高度"的问题,原本以为是很简单的问题,没想到折腾了20分钟才搞定.期间遇到几个问题,要么是高度自适应了,但是当窗口改变时会出现滚动条.也就是 ...
- jquery iframe自适应高度[转]
经典代码 iFrame 自适应高度,在IE6/IE7/IE8/Firefox/Opera/Chrome/Safari通过测试. 很古老的方法: <iframe src="../In ...
- js实现iframe自适应高度
转自:http://www.jb51.net/article/15780.htm 对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的! 不带边框的iframe因为能 ...
- 网页制作技巧:iframe自适应高度
转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...
- iframe自适应高度的多种方法小结
转自:http://www.jb51.net/article/15780.htm 不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的大小 ...
- iframe自适应高度的多种方法方法小结
对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的 不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 ifram ...
- [转载]再谈iframe自适应高度
Demo页面:主页面 iframe_a.html ,被包含页面 iframe_b.htm 和 iframe_c.html 下面开始讲: 通过Google搜索iframe 自适应高度,结果5W多条,搜索 ...
随机推荐
- MySQL的自动提交模式
默认情况下, MySQL启用自动提交模式(变量autocommit为ON).这意味着, 只要你执行DML操作的语句,MySQL会立即隐式提交事务(Implicit Commit).这个跟SQL S ...
- Linux内核高端内存
Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图. Linux内核地址空间划分 通常32位L ...
- 微信js-sdk开发获取签名和获取地理位置接口示例
###微信js-sdk开发获取签名和获取地理位置接口示例 前言:在做微信公众号开发时需要获取用户的地理位置信息,之前通过高德或者百度.腾讯等地图的api时发现经常获取不到,毕竟第三方的东西,后来改为采 ...
- phpstorm设置编码格式
phpstorm设置编码格式 默认: utf-8格式 设置方法: file -> settings -> Editor -> file encodng -> project e ...
- 比较两个slice、struct或者map是否相等
我们可以直接使用reflect.DeepEqual来比较两个slice.struct或者map是否相等 package main import ( "fmt" "refl ...
- 常见设计模式 (python代码实现)
1.创建型模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对 ...
- Node+express实现后台服务接口
一.准备工作 创建代码目录,依次执行以下操作 1.(若没有安装过)安装node 2.npm init(package.json) 3.安装express(请求)npm install express ...
- mac 开发新户攻略-brew
原文 https://www.cnblogs.com/kccdzz/p/7676840.html 这里为了备份一下,方便我自己寻找. 1.介绍 brew是一个软件包管理工具,类似于centos下的yu ...
- 《JAVA程序设计》_第三周学习总结
20175217吴一凡 一.IDEA学生免费版申请后续 收到这个邮件,就说明你申请成功了,点这里进去就行了 点击接受 在下一个界面登录你之前注册的账号绑定许可证就行了,重新登录你的账号就有了一年的许可 ...
- Linux下时钟框架实践---一款芯片的时钟树配置
关键词:时钟.PLL.Mux.Divider.Gate.clk_summary等. 时钟和电源是各种设备的基础设施,整个时钟框架可以抽象为几种基本的元器件:负责提供晶振 Linux内核提供了良好的CC ...