html iframe自动高度,真正解决iframe高度自适应问题
1.前言
解决iframe高度自适应问题有两种方法
1.pym
2.手动设置iframe的高度
本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂
如果使用iframe时,遇到以下的需求:
iframe的高度始终等于嵌入页面内容的高度,而不是屏幕的高度
右侧不允许出现两个滚动条
iframe的高度自适应不仅仅是指刚加载进来时,也有可能嵌入内容的高度会随点击变化(如:下拉菜单,左侧导航栏等)
页面可能同时嵌入多个iframe
2.contentWindow对象
*需要起个服务,不要直接在本地打开
这是个只读属性,返回指定的iframe的window对象
拿到这个对象,就可以根据正常网页的方法拿到嵌入(子)网页的文档高度,然后把值附给父页面的iframe的height。
function setIframeHeight(iframe) {
if (iframe) {
var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;
if (iframeWin.document.body) {
iframe.height = iframeWin.document.body.scrollHeight;
}
}
};
为了监测网页高度是否因为点击了某个下拉按钮高度变化,我们建立一个定时器任务,这样一直监视着子网页的高度。
setInterval(function () {
setIframeHeight($('#iframe')[0])
}, 200)
页面有可能同时存在多个iframe
$(".flexiframe").each(function (index) {//iframe公用类名:flexiframe
var that = $(this);
(function () {
setInterval(function () {
setIframeHeight(that[0])
}, 200)
})(that)
});
如果此时,你发现当子页面高度变高时,高度可以自适应的变高,但在变低时,会发现父页面的高度并没有向我们想象的随着子页面降低,导致底部留有大面积空白的问题,请继续往下看
3.文档声明的重要性
将子页面的文档声明改为就好了
4.demo
父页面:a.html
a
./flexiframe.js
// 使用前先将子页面文档声明改为
//
function setIframeHeight(iframe) {
if (iframe) {
var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;
if (iframeWin.document.body) {
iframe.height = iframeWin.document.body.scrollHeight;
}
}
};
$(".flexiframe").each(function (index) {
var that = $(this);
(function () {
setInterval(function () {
setIframeHeight(that[0])
}, 200)
})(that)
});
子页面b.html,分别注释两种声明方式,点击变大变小按钮看一下右侧滚动条的变化,(细节可以F12看一下iframe种的html和body跟div的高度关系)
小
$('#btn').on('click', function () {
if ($(this).text() == '小') {
$(this).text('大').parent().css('height', '200px')
} else {
$(this).text('小').parent().css('height', '2000px')
}
})
5.总结
1.有时间还是要了解下html的进化历史。
2.本文flexiframe.js可以直接使用,但是只支持同源下父页面可以通过contentWindow获取子页面的内容高度,跨域的下次再说。
3.欢迎指出问题或留言加深本文的深度,例如html5已经不需要声明DTD,但是我解决这个问题不得不改一下DOCTYPE,退化到html4,为什么在html5中子页面html和body的高度不是由内部的内容决定的,而是等于父元素iframe的高度?
html iframe自动高度,真正解决iframe高度自适应问题相关推荐
- 原创,真正解决iframe高度自适应的问题.兼容各浏览器
在Google输入关键字"iframe自适应高度"之后你会发现有"找到约 153,000 条结果",我大概的看了一下,发现基本上就那两三篇文章被转载来转载去.真 ...
- html iframe自动高度,iframe高度自适应撑开
iframe在div中如何自适应高度 div中的iframe高度和宽度自适应的问题 我用bootstrap布局,上边部分为导航菜单,左边为一级菜单. DIV里嵌套Iframe,让Iframe及DIV高 ...
- 真正解决iframe高度自适应问题
1.前言 解决iframe高度自适应问题有两种方法 1.pym 2.手动设置iframe的高度 本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂 如果使用iframe时,遇到以下的需求 ...
- php iframe 自适应高度,两个iframe自适应高度的解决方法
很多小伙伴在做网站的时候对于解决 1.需求分析: 使页面中的iframe可以自适应高度,避免页面高度增加的时候页面和iframe会同时出现滚动条. 2.方法一: 在iframe上面直接加onload的 ...
- 解决iframe高度自适应
解决iframe高度自适应 原因 第一种方法 第二种方法 原因 iframe的高度不会随着页面高度的变化而变化,可能会导致页面显示不全,或者页面下方有空白的问题. 第一种方法 这个方式更适用于嵌套的页 ...
- html qq下高度,怎么知道iframe内容高度
设置边框的宽度和高度 用于设置文本或图形的浮动图文框或容器. BORDER 设定围绕图文框的边缘宽度 FRAMEBODER 设置边框是不否为3维(0=否,1=是) HEIGHT,WIDTH 设质边框的 ...
- iframe自适应高度(随内容高度变化)
转载(来源忘记了...) <!--内容部分--> <div class="con"><iframe id="mainFrame" ...
- 内嵌框架iframe在火狐ff下自适高度(ie6、ie7、ff都正常)
1.脚本 在调用iframe的页面添加脚本 var FFextraHeight = 0; if(window.navigator.userAgent.indexOf("Firefox&quo ...
- iframe 自动适应高和宽问题 和 其他Frame操作技巧
< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...
最新文章
- 教你在windows 7/xp 下安装使用mencoder
- PAT甲级1058 A+B in Hogwarts :[C++题解]字符串,进制,简单
- C# 合并DLL, 合并DLL进入EXE
- Linux 查找redis进程命令:ps -ef | grep redis
- Head First设计模式读书笔记——策略模式
- java 接口编程_JAVA面向接口编程
- 《零基础》MySQL 删除数据库(六)
- t-sql还原数据库_如何更新T-SQL工具箱数据库
- uniapp ios时间戳获取不到_uni-app打包编译成安卓及ios包并上传发布测试版
- Java面试题:2021大厂最全Java面试资料
- 大数据可视化的意义在哪
- 加一度分享:如何降低推广预算,增加KPI
- C1083: 无法打开包括文件: “stdafx.h”: No such file or directory
- 地铁关门提示音,可使用倒计时
- TextBox内容垂直居中
- 材料成型是现代制造业的重要支柱,对经济社会的发展和综合国力的提升有着十分重要的意义。
- 八成家用智能摄像头存泄密风险 破解后可窃取实时画面
- cym : BaseQuickAdapter.setOnItemChildClickListener失效点击没反应
- 希尔伯特(Hilbert)变换
- 计算机基础知识八股文(网络篇)