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的 ...
随机推荐
- (原) Jquery 判断移动设备是IOS / Android系统
var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > - ...
- UVA 1343 The Rotation Game
题意: 给出图,往A-H方向旋转,使中间8个格子数字相同.要求旋转次数最少,操作序列字典序尽量小. 分析: 用一维数组存24个方格.二维数组代表每个方向对应的7个方格.IDA*剪枝是当8-8个方格中重 ...
- SQL递归查询(with cte as) 物料分解
需求 最近在做一个MRP的项目,需要根据生产下达的计划从原始无聊表中分解出成品所需要的原材料和数量. 参考 http://www.cnblogs.com/xqhppt/archive/2011/02/ ...
- zookeeper_03:Java 客户端(原生API)
环境配置 下载并ZooKeeper的发行版 新建Java project,并导入jar包 创建会话 public class CreateSession implements Watcher { pr ...
- juce 中的WeakReference分析
juce中的WeakReference设计得比较巧妙,巧妙就是使用delete之后就可以通知道WeakReference,原理其实也很间单,其实就是在对象里添加了一个子对象masterReferenc ...
- MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载
MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载 武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...
- 【Chromium中文文档】沙箱FAQ
沙箱FAQ 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox ...
- 学习Emacs系列教程
emacs最简单入门,只要10分钟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...
- Linux学习之二十、循环
原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0340bashshell-scripts_5.php 回圈 (loop) 除了 if...then...fi ...
- Redis短结构与分片
本文将介绍两种降低Redis内存占用的方法——使用短结构存储数据和对数据进行分片. 降低Redis内存占用有助于减少创建快照和加载快照所需的时间.提升载入AOF文件和重写AOF文件时的效率.缩短从服务 ...