ifram 自适html5,使用postMessage让 iframe自适应高度的方法示例

前言

有时候,我们会使用 iframe标签,将前端分离项目无感的嵌入 如以Freemark为主体较老的项目中。

我们知道,当iframe内部内容比父页面所指定的宽高大的时候,会出现滚动框。

所以,让iframe的宽高能根据自身内容自动改变,就成了一个必须要解决的问题。

使用HTML5中新定义的window.postMessage 可以实现跨window通信。

demo效果

c674ad6b811de97cd17fba1f18c57ea4.gif

我们要的效果如上图所示。

3f29833b4d808f93a0bd036c846be9c8.png

黄色区域 是通过 iframe标签引入 的body.html部分。

index.html :

var $ = window.jQuery;

.header{

width: 100%;

min-width: 1260px;

height: 70px;

background-color: red;

box-shadow: 0 0 5px black;

border-radius: 10px;

}

.center{

width: 1560px;

height: 1470px;

margin: 20px auto;

}

.iframe{

width: 250px;

height: 250px;

margin: 20px 0 0 40px;

}

.left-nav{

width: 200px;

height: 1470px;

background-color: blue;

float: left;

margin-top: 10px;

box-shadow: 0 0 5px black;

border-radius: 10px;

}

css study

window.addEventListener('message', e => {

if (e.data.type === 1) {

$('#shopIframeId').width(e.data.data.width + 50)

$('#shopIframeId').height(e.data.data.height + 50)

}

});

body.html:

var $ = window.jQuery;

.box{

width: 200px;

height: 200px;

box-shadow: 0 0 5px black;

border-radius: 10px;

background-color: yellow;

}

css study

var data = {

el: $('.box'),

height: $('.box').outerHeight(),

width: $('.box').outerWidth(),

parent: window.parent

}

$('.box').on('click', function () {

// 更新数据

if (data.width < 1250) {

data.width += 50

}

data.height += 50

// 更新视图

data.el.width(data.width)

data.el.height(data.height)

// 通知父window 自身高度变更

data.parent.postMessage({

type: 1,

data: {

width: data.width,

height: data.height

}

}, '*')

})

正题

我们知道,把大象装进去需要四步。

使用postMessage API发送消息比装大象要少一步,只需要三步就行。

分别是:

1、找到发送对象

2、发送消息

3、设置消息处理

接下来,我们用上面的例子,一一来说。

1、找到发送目标对象

使用window.parent 就可以获取引入自身文档的父window对象。

var data = {

el: $('.box'),

height: $('.box').outerHeight(),

width: $('.box').outerWidth(),

parent: window.parent

}

我在这一步中还初始化了鉴定dom,监听dom的height和width,核心是用window.parent获取 index.html文件的window对象

2、在iframe中发送消息

$('.box').on('click', function () {

// 更新数据

if (data.width < 1250) {

data.width += 50

}

data.height += 50

// 更新视图

data.el.width(data.width)

data.el.height(data.height)

// 通知父window 自身高度变更

data.parent.postMessage({

type: 1,

data: {

width: data.width,

height: data.height

}

}, '*')

})

给目标div挂在一个单机事件,每次点击时,都会增加50xp的宽高(如果宽度大于等于1250则宽度不增加)。

然后使用el.postMessage(message,  targetOrigin)方法发送消息。

el:

el是其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。

message:

message参数是要传输的数据消息体。

targetOrigin:

targetOrigin参数通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串"*"(表示无限制)或者一个URI。在发送消息的时候,如果目标窗口的协议、主机地址或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。

3、设置消息处理

window.addEventListener('message', e => {

if (e.data.type === 1) {

$('#shopIframeId').width(e.data.data.width + 50)

$('#shopIframeId').height(e.data.data.height + 50)

}

});

我再index.html 添加了message监听,如果有消息被发送过来,则会触发处理函数,更新iframe标签的宽高。

处理函数传入一个参数e,e是一个消息对象,包含如下重要属性:

data:

从其他 window 中传递过来的对象。

origin:

调用 postMessage 时消息发送方窗口的origin . 这个字符串由 协议、“://“、域名、“ : 端口号”拼接而成。例如 “ https://example.org (隐含端口 443 )”、“ http://example.net (隐含端口 80 )”、“ http://example.com:8080 ”。请注意,这个origin不能保证是该窗口的当前或未来origin,因为postMessage被调用后可能被导航到不同的位置。

source:

对发送消息的窗口对象的引用; 您可以使用此来在具有不同origin的两个窗口之间建立双向通信。

小结

在消息传输中,我使用type属性,在iframe中传输不同的message.type和message.data,父window中就可以根据不同的message.type做出相应的处理。

譬如message.type如果等于2,则可以设置弹出一个带弹层的alert,内容从message.data获取

这样就可以解决,在iframe中弹层不能覆盖到外部的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

前端H5框架自适应模板 页面自适应,750px*1334px模板,也就是font-size:20px模板,自行换算 立即下载

相关推荐

Langchain与Milvus集成中的pymilvus.exceptions.MilvusException: channel not found错误解析

本文深入解析了在Langchain与Milvus集成时常见的pymilvus.exceptions.MilvusException: channel not found错误。该错误通常由客户端配置错误、网络问题、服务端状态异常或版本不兼容导致。文章提供了从基础连通性测试到高级网络排查的完整故障排除指南,并针对本地Docker、远程服务器及Kubernetes等典型部署场景给出了具体解决方案,帮助开发者快速定位并修复这一连接层问题。

weixin_29229989的博客 217

H5页面中用iframe的src嵌套外部页面实现自适应

最终实现效果 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta id="viewport" name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scal...

九段刀客的博客 6445

Versal ACAP NoC实战:像理解计算机网络一样配置AXI NoC,打通PS与PL数据通路

本文深入探讨了Versal ACAP NoC的配置与优化,通过计算机网络类比解析NoC架构,详细介绍了在VD100开发板上配置AXI NoC实现PS与PL数据交互的实战步骤。文章涵盖NoC组件功能、Vivado配置技巧、性能优化方法及常见问题解决方案,帮助开发者高效打通Versal芯片的数据通路。

weixin_42665255的博客 291

<iframe>标签自适应高度和宽度

/* reset */     *{margin:0;padding:0;list-style-type:none;}     a{blr:expression(this.onFocus=this.blur())}/*去掉a标签的虚线框,避免出现奇怪的选中区域*/     :focus{ou

ivpry的博客 806

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 287

基于单片机电能质量检测仪设计

*单片机设计介绍,基于单片机电能质量检测仪设计。

2201_75940997的博客 1204

ifram 自适html5,iframe 自适应内容高度

以下代码放入body中:function SetCwinHeight(){varbobo=document.getElementById(“bobo”); //iframe idif (document.getElementById){if(bobo && !window.opera){if (bobo.contentDocument &&bobo.contentD...

weixin_39862794的博客 190

SAN存储与协议,了解SCSI、FC和ISCSI

在前面我们介绍SAN存储及iSCSI协议的时候了解到SAN存储其实是一个CS架构的系统。存储系统本身就是整个系统的服务端。以IP-SAN(也就是基于iSCSI的SAN存储)为例,其整体架构如图1所示。 图1 CS架构 对于存储系统来说,通常是由专业的存储厂商提供,比较知名的如EMC、NetAPP、IBM和日立等等。国内存储厂商也迅速崛起,比较知名的如华为、宏杉、浪潮和同友等等。另外,还有一些小的存储厂商,他们往往集中在某个领域,比如专注文件系统或者块存储等等。 除了专业的存储设备外,其实Linux

shuningzhang的专栏 2684

h5 iframe 自适应高度

h5 iframe 自适应高度 外部div:div position: relative; width: 100%; padding-top: calc(100% * 720 / 1280); border: 2px black solid; 内部iframe:position: absolute; width: 100%; height: 100%; top: 0; <div style="position: relative; width: 100%; padding-top: cal

mtl1994的博客 3130

【立创EDA-PCB设计基础】4.模块化布局

本文对本专栏绘制的原理图进行模块化布局,首先进行预布局(将每个模块放一起),然后进行精细化布局(按照原理图来精细化布局)。

嵌入式阿齐Archie 3万+

【深度学习新浪潮】算力行业的核心技术有哪些?

算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。

专注:太空算力、AI infra、异构调度、大模型成本工程 338

vue通过postMessage实现iframe自适应高度,支持跨域

通过消息传递实现iframe自适应高度,支持跨域。 父页面监听消息 <template> <iframe id="processFrame" name="frames" width="100%" :src="iframeUrl" frameborder="0"></iframe> </template> <script> export default { data() { return { iframeUrl: "",

qq_16737187的博客 1097

把雷达强度特征融合于 Cartographer的实现流程 :从地图构建到在线定位

摘要:本文提出在激光SLAM中融合强度特征的方法,解决几何匹配在退化环境中的失效问题。详细介绍了两种高反地图生成方式:离线使用assets_writer工具处理优化轨迹,在线实时累积高反点;以及权重网格的构建与预计算金字塔方法。定位阶段通过加权得分公式融合几何和强度信息,采用自适应缩放策略平衡特征依赖。该方案在不显著增加计算负担的前提下,有效提升了对称环境等退化场景的定位稳定性,对利用人工路标的移动机器人具有实用价值。

Studying…… 1327

iframe的基本介绍与使用

一、iframe的基本介绍 二、iframe的基本使用 三、iframe的属性介绍 四、iframe注意事项 五、iframe的URL传参方法 六、iframe的postMessage()传参方法

qq_45799465的博客 5万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

如何设置iframe高度自适应,在跨域的情况下能做到吗?

  在页面上使用iframe来动态加载页面内容是网页开发中比较常见的方法。在父页面中给定一个不带滚动条的iframe,然后对属性src指定一个可加载的页面,这样当父页面被访问的时候,子页面可以被自动加...

whiteGay的博客 126

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

什么是 iframe?它在网页中的应用与实现

iframe是一个功能强大的 HTML 元素,允许我们在页面中嵌入外部网页内容、媒体文件、广告等。它的隔离性和便捷性使得网页开发更加灵活,但也需要注意跨域问题、SEO 影响和性能优化等挑战。通过合理使用iframe,可以有效提升网页的交互性和内容展示效果。

weixin_63726940的博客 3929

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用iframe实现视频监控

iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站的内容 iframe常用属性: 1.frameborder:是否显示边框,1(yes),0(no) 2.height:框架作为一个普通元素的高度,建议在使用css设置。 3.width:框架作为一个普通元素的宽度,建议使用css设置。 4.name:框架的名称,window.frames[name]时专用的属性。 5.scrolling:框架的是否滚动。yes,no,auto。 6.src:内框架的地址,可以使页..

weixin_44090040的博客 1739

Web前端iframe使用以及页面通信postmessage

iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了 <iframe src="demo_iframe_sandbox.htm"></iframe> iframe常用属性: 1.frameborder:是否显示边框,1(yes),0(no) 2.height:框架作为一个普通元素的高度,建议在使用css设置。 3.width:框架作为一个普通元素的宽度,建议使用css设置。 4.name:框架的名称,window.frames[nam

weixin_42845571的博客 5378

iframe的高度自适应

现在有这样一个情景:a页面需用使用iframe嵌入b页面,而b页面的内容高度是不固定的,有可能是300px,有可能是500px......,这时候我要求在a页面嵌入b页面的区域不能有垂直滚动条,怎么实现呢?很显然,因为被嵌入的b页面高度是不确定的,我们在使用iframe的时候就不能固定iframe这个元素的高度,而是应该写为100%。好,下面我还是用最简单的例子来验证如何完美的解决iframe高度...

xiaozhuangyumaotao的博客 6699

postMessage解决iframe标签跨域自适应高度问题

iframe标签自适应高度

m0_66722601的博客 486

html iframe自动高度,真正解决iframe高度自适应问题

1.前言解决iframe高度自适应问题有两种方法1.pym2.手动设置iframe的高度本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂如果使用iframe时,遇到以下的需求:iframe的高度始终等于嵌入页面内容的高度,而不是屏幕的高度右侧不允许出现两个滚动条iframe的高度自适应不仅仅是指刚加载进来时,也有可能嵌入内容的高度会随点击变化(如:下拉菜单,左侧导航栏等)页面可能同...

weixin_33826994的博客 4359

iframe框架使用方法_从零开始学前端 24. JS BOM之Window对象详解及常用方法

每篇文章纯属个人经验观点,如有错误疏漏欢迎指正Window是BOM的核心对象,它表示浏览器的一个实例,也就是说,Window对象只存在于浏览器环境中,在其他的环境内,是以Global为核心对象的。在浏览器中,Window对象既是通过 JS 访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以...

weixin_39684052的博客 487

iframe内嵌网页宽度自适应样式设置

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta id="viewport" name="viewport" content="width=device-width,minimum-scal

Neo_L的博客 2万+

使用iframe内嵌网页的时候,如何做到内嵌网页的高度自适应

在页面无刷新更新方面,虽然现在的ajax很强悍,但是处理代码相对多点。想比之下,iframe就简单多了!处理iframe的自适应宽、高,会经常用到,网上整理了一份,写在这里备用: 单个iframe 高度自适应: 起作用的是这句:onload="this.height=iFrame1.document.body.scrollHeight" 多层嵌套iframe 高度自适应: A页面的if

DavidLog的博客 2万+

H5学习笔记——iframe内嵌框架

一、基础 在网页内部再显示网页,用到的控件iframe。 &lt;iframe src="https://www.baidu.com" width="900" height="500" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt; frameborder:边框宽度 scrolling:是否显示滚动条 二、拓

OneKey 1万+
上一篇: 学生专用计算机玩游戏教学,学校安排学生下午专玩游戏 称可帮助戒除网瘾
下一篇: 台式计算机cpu是什么,台式电脑CPU是几核怎么查看
李管春
博客等级 码龄9年 55粉丝 1万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值