iframe自适应高度的问题
最近工作中遇到了iframe自适应高度的问题。
如果在iframe中写定高度height的属性,并且iframe中内容高度小于给定的height时,会在手机浏览器中莫名的产生下拉框,造成体验度下降。
但是如果不去设定height的属性,iframe的高度始终维持在150px,这样的话我们只能够通过js动态的去改变iframe的高度,实现iframe的高度自适应。
高度自适应的本质就是通过内容高度,去设定iframe高度。
然而因为iframe中内容的背景色不一定和父级页面的一致,所以我们在内容高度小于屏幕高度时,使用屏幕高度为iframe的高度。
因而我们通过比较屏幕高度和iframe中内容高的方式,来确定我们iframe最终的显示高度。
父级页面中的iframe代码如下:
<iframe allowtransparency="true" id="content" name="content" src="xxx.html" scrolling="no" frameborder="0" ></iframe>
获取屏幕尺寸的代码:
function getScreenSize(winObj){
var size = {
width : 0,
height : 0
}
// 获取窗口宽度
if (winObj.innerWidth){
size.width = winObj.innerWidth;
}else if ((winObj.document.body) && (winObj.document.body.clientWidth))
size.width = winObj.document.body.clientWidth;
// 获取窗口高度
if (winObj.innerHeight)
size.height = winObj.innerHeight;
else if ((winObj.document.body) && (winObj.document.body.clientHeight))
size.height = winObj.document.body.clientHeight;
// 通过深入 Document 内部对 body 进行检测,获取窗口大小
if (winObj.document.documentElement && winObj.document.documentElement.clientHeight
&& winObj.document.documentElement.clientWidth)
{
size.height = winObj.document.documentElement.clientHeight;
size.width = winObj.document.documentElement.clientWidth;
}
return size;
}
因为是每次iframe中内容改变的时候,需要iframe的高度自适应,所以我的自适应代码加在iframe中的页面中在页面加载结束后运行:
window.onload = function(){
// 获取自己在父级页面中的frame节点
var contentFrame = parent.document.getElementById('content');
// 获取屏幕高度
var parentScrHeight = getScreenSize(window.parent).height;
// 获取自己的内容高度
var contentHeight = document.body.clientHeight;
// 若是屏幕高,使用frame内容高度
// 若是frame内容高,使用屏幕高度
contentFrame.style.height = parentScrHeight < contentHeight ?
contentHeight + "px" : parentScrHeight + "px";
};
以上步骤就完成了通过js控制iframe自适应的功能。
注: 当页面中有需要动态加载内容是,页面内容高度会进行改变,这时就需要将以上onload中的内容封装为方法:
function changeParent(){
// 获取自己在父级页面中的frame节点
var contentFrame = parent.document.getElementById('content');
// 获取屏幕高度
var parentScrHeight = getScreenSize(window.parent).height;
// 获取自己的内容高度
var contentHeight = document.body.clientHeight;
// 若是屏幕高,使用frame内容高度
// 若是frame内容高,使用屏幕高度
contentFrame.style.height = parentScrHeight < contentHeight ?
contentHeight + "px" : parentScrHeight + "px";
}
当每次页面进行内容改变时,就可以调用chagneParent方法进行动态的自适应改变。
iframe自适应高度的问题的更多相关文章
- jquery 清空 iframe 的内容,,iframe自适应高度
$(iframe).contents().find("body").html(""); iframe自适应高度 $("#AllDescription& ...
- 真正的让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 自适应高度的方法!
第一种方法:代码简单,兼容性还可以,大家可以先测试下. function SetWinHeight(obj) { var win=obj; if (document.getElementById) { ...
- 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多条,搜索 ...
- iframe自适应高度的多种方法方法小结(转)
对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的 ...
随机推荐
- vba考勤处理
sheet1 格式 Sub 统计人数() 'A为号码C姓名 D时间 Dim j As Integer j = 1 For i = 2 To 100000 Step 1 If Range("a ...
- VirtualBox镜像复制载入
转发:http://blog.csdn.net/dotuian/article/details/9127229 一,虚拟镜像文件格式 VirtualBox磁盘镜像文件(VDI, VMDK, VHD, ...
- Windows计算器使用详解
(1)Backspace:退格,删除当前输入数字中的最后一位 (2)CE:清除,清除显示的数字. (3)C:归零,清除当前的计算. (4)MC:清除存储器中的数值. (5)MR:将存于存储器中的数显示 ...
- Ubuntu package managerment tools
Visual demostration References Understanding differences between dpkg and apt-get/aptitude tools. A ...
- JavaWeb核心编程之(四.1)JSP
JSP简介: JSP是简化Servlet编写的一种技术, 它将Java代码和HTML语句混合在一个文件中编写, 只对网页中药动态产生的内容采用Java代码来编写, 而对固定不变的静态内容采用普通的静态 ...
- JDK安装与环境变量配置(Win7)
1.下载JDK(Java SE Development Kit) 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...
- 01UITextField基础知识
文字属性 文字属性包括:text; placeholder(默认使用70%灰色):font:textColor;textAligment. 文字大小 文字大小包括:adjustsFontSizeToF ...
- sql server 2008 索引
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引) 我们举例来 ...
- 凯恩斯主义VS货币主义
Milton Friedman在1960年代后期以及整个1970年代,到处不知疲倦地像传教士一般地宣讲他的货币主义.当时,美联储成员几乎清一色地是凯恩斯主义者.你可以想像Friedman的对手是多么强 ...
- [开源]在iOS上实现Android风格的控件Toast
[开源]在iOS上实现Android风格的控件Toast iOS的风格和Apple其他产品一样,简单而粗暴.没有给人其他选择的余地,让你又爱又恨.同样的,Apple对待iOS平台的开发人员和对待大众消 ...