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高度自适应问题相关推荐

  1. 原创,真正解决iframe高度自适应的问题.兼容各浏览器

    在Google输入关键字"iframe自适应高度"之后你会发现有"找到约 153,000 条结果",我大概的看了一下,发现基本上就那两三篇文章被转载来转载去.真 ...

  2. html iframe自动高度,iframe高度自适应撑开

    iframe在div中如何自适应高度 div中的iframe高度和宽度自适应的问题 我用bootstrap布局,上边部分为导航菜单,左边为一级菜单. DIV里嵌套Iframe,让Iframe及DIV高 ...

  3. 真正解决iframe高度自适应问题

    1.前言 解决iframe高度自适应问题有两种方法 1.pym 2.手动设置iframe的高度 本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂 如果使用iframe时,遇到以下的需求 ...

  4. php iframe 自适应高度,两个iframe自适应高度的解决方法

    很多小伙伴在做网站的时候对于解决 1.需求分析: 使页面中的iframe可以自适应高度,避免页面高度增加的时候页面和iframe会同时出现滚动条. 2.方法一: 在iframe上面直接加onload的 ...

  5. 解决iframe高度自适应

    解决iframe高度自适应 原因 第一种方法 第二种方法 原因 iframe的高度不会随着页面高度的变化而变化,可能会导致页面显示不全,或者页面下方有空白的问题. 第一种方法 这个方式更适用于嵌套的页 ...

  6. html qq下高度,怎么知道iframe内容高度

    设置边框的宽度和高度 用于设置文本或图形的浮动图文框或容器. BORDER 设定围绕图文框的边缘宽度 FRAMEBODER 设置边框是不否为3维(0=否,1=是) HEIGHT,WIDTH 设质边框的 ...

  7. iframe自适应高度(随内容高度变化)

    转载(来源忘记了...) <!--内容部分--> <div class="con"><iframe id="mainFrame" ...

  8. 内嵌框架iframe在火狐ff下自适高度(ie6、ie7、ff都正常)

    1.脚本 在调用iframe的页面添加脚本 var FFextraHeight = 0; if(window.navigator.userAgent.indexOf("Firefox&quo ...

  9. iframe 自动适应高和宽问题 和 其他Frame操作技巧

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

最新文章

  1. 教你在windows 7/xp 下安装使用mencoder
  2. PAT甲级1058 A+B in Hogwarts :[C++题解]字符串,进制,简单
  3. C# 合并DLL, 合并DLL进入EXE
  4. Linux 查找redis进程命令:ps -ef | grep redis
  5. Head First设计模式读书笔记——策略模式
  6. java 接口编程_JAVA面向接口编程
  7. 《零基础》MySQL 删除数据库(六)
  8. t-sql还原数据库_如何更新T-SQL工具箱数据库
  9. uniapp ios时间戳获取不到_uni-app打包编译成安卓及ios包并上传发布测试版
  10. Java面试题:2021大厂最全Java面试资料
  11. 大数据可视化的意义在哪
  12. 加一度分享:如何降低推广预算,增加KPI
  13. C1083: 无法打开包括文件: “stdafx.h”: No such file or directory
  14. 地铁关门提示音,可使用倒计时
  15. TextBox内容垂直居中
  16. 材料成型是现代制造业的重要支柱,对经济社会的发展和综合国力的提升有着十分重要的意义。
  17. 八成家用智能摄像头存泄密风险 破解后可窃取实时画面
  18. cym : BaseQuickAdapter.setOnItemChildClickListener失效点击没反应
  19. 希尔伯特(Hilbert)变换
  20. 计算机基础知识八股文(网络篇)

热门文章

  1. 如何使用JS将两个数组合并为一个数组
  2. shell脚本字体设置
  3. 不同进程log占有量分析
  4. LINUX生成僵尸进程并ps打印出来
  5. zcu102自学 —— 第一个实验 (纯PS 串口打印 Hello world)
  6. Office查看安装版本
  7. 苹果天气不显示_苹果自带闹钟这么神?用了5年iPhone才知道,懂的人绝不会卸载它...
  8. Mac卡顿 CPU占100%的原因分析及解决办法
  9. pandas学习(四)——分组
  10. js分页页码显示逻辑实现的两种方法