iframe

iframe学习

1.iframe是什么?

a)iframehtml元素,用于在网页中内嵌另一个网页。

b)iframe默认有一个宽高,存在边界。

c)iframe是一个行内块级元素,可以通过display修改。

2.iframe元素属性有哪些?

a)src : 指定内联网页的地址。

b)frameborder: iframe默认有个边界,可以设置frameborder0清除边界。frameborder已过时,最好使用css属性来修改边框。

c)widthheight: 控制iframe的宽高。

d)name: 框架的名称。

e)scrolling: 是否可滚动,yes ,no,auto。

3.iframe互相操作

每个iframe里都有 各自维护自己的 全局window对象。

3.1父级操作子iframe

在父级使用iframe.contentWindow获取子iframe的window对象,根据window对象进而可以获取子iframe的document对象,根据document对象又可以对html元素进行操作。示例如下:

var iframe = document.getElementById("myrame"); //获取iframe标签
var iwindow = iframe.contentWindow; //获取iframe的window对象
var idoc = iwindow.document; //获取iframe的document对象
console.log(idoc.documentElement); //获取iframe的html
3.2子iframe操作父级

在子iframe想要操作父元素的iframe,直接使用子元素的window.parent来获取父级元素的window对象,从而获取document来操作dom。示例如下:

window.parent.document.getElementById(“auditDate”).value;
4.iframe之间的通信
4.1不跨域

a)不跨域情况下,父组件向iframe子组件传值(或父组件中定义一个属性,iframe子组件可以获取到父组件的属性)

方法一:子组件使用parent可以获取到父组件的window对象,进而获取父组件定义的属性;

//父组件定义fatherData
let fatherData = '父元素数据';//子iframe获取fatherData
console.log(parent.fatherData);

方法二:父组件 通过向iframe的contentWindow添加属性,子组件需要时通过Window[属性名]获取父元素传递的数据;(个人理解,父组件通过contentWindow获取到子iframe的window对象,直接在子iframe的window对象上定义属性,那么子iframe通过自己的window对象就能获取到父组件定义的属性了)

//父组件定义fatherData
let fatherData = '父元素数据';//父组件向子iframe的contentWindow添加属性
let iframe1 = document.getElementById('iframe1');
iframe1.contentWindow.fatherData = fatherData;//子iframe获取fatherData
(() => {console.log(window.fatherData);})()

方法三:子组件定义函数fn, 父组件 通过iframe的contentWindow获取到子组件fn,并通过fn传值到iframe子组件;(个人理解,父组件通过contentWindow获取到子iframe的window对象,相当于父组件在子组件里的权利和子组件一样,可以使用子组件里的任何方法或属性,父组件调用子组件里的方法和子组件调用自己的方法无差别)

//父组件定义fatherData
let fatherData = '父元素数据';//子Iframe定义方法
function setIframe1(data) {console.log(data);
}//父组件通过子iframe的contentWindow调用子iframe定义的方法
let iframe1 = document.getElementById('iframe1');
iframe1.contentWindow.setIframe1(fatherData);

b)iframe子组件向父组件传值。

父元素定义函数getChild并通过向iframecontentWindow添加getChild方法,子组件通过Window.getChild();传值给父组件;

//父组件定义函数
function getChild(data) {console.log('获取到子组件数据', data);
}//父组件向`iframe`的`contentWindow`添加`getChild`方法
let iframe1 = document.getElementById('iframe1');
iframe1.contentWindow.getChild = getChild();//子组件调用
(() => {window.getChild('hhh');
})()
4.2跨域

方法一:利用location.hash,父组件给子组件iframe标签的src属性链接后面添加#,子组件通过location.hash获取父组件数据,从而达到父组件操作子组件。

//父组件
<iframe id="iframe1" src="xxxx#msg=111" width="" height="" frameborder="0" scrolling="no"></iframe>
//子iframe
console.log('location.hash', location.hash);

方法二:使用postMessage实现跨域通信。postMessage方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。

//语法
otherWindow.postMessage(message, targetOrigin, [transfer]);
//otherWindow:发送消息的窗口
//message:将要发送到其他window的数据。
//targetOrigin:指定那些窗口能接收到消息事件,其值可以是字符串 “*” 表示无限制,或者是一个URI。
//transfer:是一串和message同时传递的Transferable对象,这些对象的所有权将被转移给消息的接收方,而发送方将不再保留所有权。

postMessage方法被调用时,会在所有页面脚本执行完毕之后像目标窗口派发一个 MessageEvent 消息,该MessageEvent消息有四个属性需要注意:

type:表示该message的类型
data:为 postMessage 的第一个参数
origin:表示调用postMessage方法窗口的源
source:记录调用postMessage方法的窗口对象

//父组件定义fatherData
let fatherData = '父元素数据';//父组件发送消息给子iframe
(() => {iframe1.contentWindow.postMessage(fatherData,"http://xxxx/iframe1.html")
})()//子iframe监听消息
window.addEventListener('message', function(event) {console.log('event', event);
}, false);
5.注意

获取子元素的document时要确保子元素所有dom元素已经挂载完毕,因此在原生的写法时,必须写在windowonload事件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[教程] 一文进阶Redis

Redis进阶 过期时间&#xff08;Expire&#xff09; Redis 的过期时间&#xff08;Expire&#xff09;功能是一种数据生命周期管理机制&#xff0c;允许为键设置一个过期时间。一旦达到该时间&#xff0c;键会自动被删除。这对于管理缓存数据特别有用&#xff0c;可以自动清理…

Mac电脑版程序创建工具 VMware InstallBuilder Enterprise mac最新

VMware InstallBuilder Enterprise 是一款功能强大、操作简单、跨平台支持的软件安装和部署工具&#xff0c;可以让开发者更加高效地创建和部署软件&#xff0c;并提供了丰富的功能和工具&#xff0c;适用于不同的用户需求和场景。 内置调试器 轻松排除应用程序安装过程中的故…

《LeetCode力扣练习》代码随想录——哈希表(两个数组的交集---Java)

《LeetCode力扣练习》代码随想录——哈希表&#xff08;两个数组的交集—Java&#xff09; 刷题思路来源于 代码随想录 349. 两个数组的交集 Set哈希表 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> hashSetnew HashSet<>(…

样品实验EPONEX1510氢化双酚A环氧树脂TDS说明书

样品实验EPONEX1510氢化双酚A环氧树脂TDS说明书 200克 500克 1KG/瓶

nginx-安全防护、跨域、XSS攻击、点击劫持攻击

通过nginx失效安全防护 防止跨域-请求头Content-Security-PolicyCSP配置CSP参数解释CSP指令 防止跨站脚本攻击&#xff08;XSS&#xff09;-请求头X-Xss-Protection配置解释 跨站脚本攻击&#xff08;XSS&#xff09;-请求头X-Content-Type-Options配置解释 防止点击劫持攻击-请…

pyrosetta学习相关(1)

1.前端 PyRosetta脚本的并行化处理 2.Allowing cysteines to repack 3.PyRosetta与多进程处理密集型任务 4.pyrosetta 5.What is Rosetta? 6.PyRosetta FastDesign 7.PyMOL_Mover Tutorial 8.conda pyrosetta3 9.Downloads 10.PyRosetta开发环境配置 11.[Deprecated] Legac…

使用Docker安装Jenkins,解决插件安装失败,版本太低等问题

如果已经遇到插件安装部分失败&#xff0c;Jenkins版本太低&#xff0c;又要换什么清华镜像地址&#xff0c;不要犹豫&#xff0c;直接以下步骤卸载重装就好了 开始安装 yum 更新到最新 yum update到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具…

使用Spring的@Scheduled注解实现定时任务

摘要&#xff1a;Spring框架提供了强大的定时任务功能&#xff0c;其中Scheduled注解是其中之一。本篇技术博客将介绍如何使用Scheduled注解&#xff0c;在Spring应用程序中实现定时任务的调度与执行。 什么是Scheduled注解&#xff1f; Scheduled是Spring框架中的一个注解&am…

深入探索Maven:优雅构建Java项目的新方式(二)

Meven高级 1&#xff0c;属性1.1 属性1.1.1 问题分析1.1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version 1.2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效 1.3 版本管理 2&#xff0c;…

Sass 安装

文章目录 前言SASS的系统要求安装Ruby例子后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&…

Informer辅助笔记:data/dataloader.py

以WTH为例 import os import numpy as np import pandas as pdimport torch from torch.utils.data import Dataset, DataLoader # from sklearn.preprocessing import StandardScalerfrom utils.tools import StandardScaler from utils.timefeatures import time_featuresim…

什么是光模块光模块看我这张就够啦!

1、什么是光模块 信号在光网络中传输时&#xff0c;必须进行光/电转换。光模块就是专门在光网络中完成光/电转换工作的部件。光模块的外观结构如图1所示&#xff0c;简单的来说&#xff0c;双绞线最大传输距离是100米&#xff0c;用的是电信号&#xff0c;那如果说传输距离超过…

骨传导能保护听力吗?使用骨传导有没有副作用?

先说结论&#xff0c;骨传导耳机是可以保护听力的&#xff0c;如果是正常的使用骨传导耳机&#xff0c;是不会有任何副作用的。 一、为什么说骨传导耳机能保护听力 1、佩戴方式更健康 由于骨传导耳机采用耳挂式佩戴&#xff0c;在使用的时候开放双耳&#xff0c;不会堵塞耳道…

搭建完善的绩效管理体系的重点解读

绩效管理最终目的就是实现企业的战略目标&#xff0c;如果没有战略目标作为基础&#xff0c;绩效管理体系就没有了依托&#xff0c;就无法发挥其应有的效用。在实际的企业绩效体系搭建过程中&#xff0c;战略目标的转化是整个体系的“骨架支持”部分&#xff0c;而针对绩效目标…

如何使用vs2022通过excel.exe生成VC、C++能够使用的头文件

我们在开发MFC、VC、C项目时&#xff0c;有时候需要操作excel文件的读写&#xff0c;我们一般常用方式是调用微软的excel驱动方式调用&#xff0c;但调用驱动前&#xff0c;我们需要生成我们C能够调用到的头文件&#xff0c;一般常用文件有&#xff1a; #include "CAppli…

GPT-4 惨遭削弱;拼多多市值一度超阿里;雷军回应个人向武汉大学捐款 13 亿元丨 RTE 开发者日报 Vol.96

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有…

大模型的实践应用10-大模型领域知识与参数高效微调(PEFT)技术的详解,并利用PEFT训练自己的大模型

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用10-大模型领域知识与参数高效微调(PEFT)技术的详解,并利用PEFT训练自己的大模型。大模型领域的参数高效微调技术(PEFT)是指通过对大规模神经网络模型进行高效率的参数微调,以提高模型性能和效率的一种方法。PEFT技术通…

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角&#xff0c;成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分&#xff0c;利用这些积分进行投资或获取现实物品。它不同于传统的资金盘&#xff0c;而是以一种更稳健的方式运作&#xff0c;避免了资金盘的风险。 一、卷轴…

智能优化算法应用:基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于帝国主义竞争算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.帝国主义竞争算法4.实验参数设定5.算…

供应商关系管理软件:如何使用它来改善供应商关系?

从最基本的角度来说&#xff0c;企业需要供应商为其生产和销售的产品或服务提供原材料&#xff0c;或者为其提供资源和服务来经营自己的业务。 建立稳定而健康的供应商关系的最大优势之一&#xff0c;就是可以为企业带来更高的价值。企业对供应商了解越多&#xff0c;供应商对…