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的 ...
随机推荐
- 阻止JS事件冒泡传递(cancelBubble 、stopPropagation)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- RDLC报表系列(五) 简单的图表-柱状图
继续接上一篇的内容,本文主要是讲图标的内容,本文就是简单的图标,复杂的柱状图和折线图在下一文章中介绍. 数据源还是上文RDLC报表系列(四) 矩阵中的相同 1.还是继续使用demo2的文件
- [Effective C++系列]-透彻了解inlining的里里外外
Understand the ins and outs of inlining. [原理] Inline函数背后的做法是将“对函数的每一个调用”都用函数本体(function body)替换之.其 ...
- 用OpenCV实现Otsu算法
算法的介绍 otsu法(最大类间方差法,有时也称之为大津算法)使用的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小,通过方差的计算来寻找 ...
- gcc 编译和链接
1.现在对两个文件生成可执行文件 //thanks.c #include <stdio.h> int main(void) { printf("Hello World\n&quo ...
- MySql中游标使用总是多循环一次的解决方法
CREATE DEFINER = 'root'@'%' PROCEDURE deyestest.procedure2() BEGIN DECLARE v_id INT; DECLARE v_userN ...
- django随笔说明
最近学习了vamei的快速Python教程,想着语法学了不用就要忘记,总要拿点东西来练练手,然后又开始学习Django,也算是顺势而为吧. 现在学Django,是跟着教程djangobook学的,内容 ...
- windows下mysql数据库表名大小写不敏感
最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题 ...
- PHP json_encode()函数使用
<?php $tmp = array(); echo json_encode($tmp); //打印 [] echo "\n"; echo json_encode($tmp, ...
- php 文件操作类
class fileInit { /** * 创建空文件 * @param string $filename 需要创建的文件 * @return */ public function create_f ...