iframe
iframe学习
1.iframe
是什么?
a)iframe
是html
元素,用于在网页中内嵌另一个网页。
b)iframe
默认有一个宽高,存在边界。
c)iframe
是一个行内块级元素,可以通过display
修改。
2.iframe
元素属性有哪些?
a)src
: 指定内联网页的地址。
b)frameborder
: iframe
默认有个边界,可以设置frameborder
为0
清除边界。frameborder
已过时,最好使用css
属性来修改边框。
c)width
,height
: 控制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
并通过向iframe
的contentWindow
添加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
元素已经挂载完毕,因此在原生的写法时,必须写在window
的onload
事件中。
相关文章:
iframe
iframe学习 1.iframe是什么? a)iframe是html元素,用于在网页中内嵌另一个网页。 b)iframe默认有一个宽高,存在边界。 c)iframe是一个行内块级元素,可以通过display修改。 2.iframe元素属性有哪些? a)src : 指定内联网页的地…...
rust 基本数据类型
Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型,基本类型如下 整型 整数 是一个没有小数部分的数字长度有符号无符号8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisi…...

centos7中通过kubeadmin安装k8s集群
k8s部署官方提供了kind、minikube、kubeadmin等多种安装方式。 其中minikube安装在之前的文章中已经介绍过,部署比较简单。下面介绍通过kubeadmin部署k8s集群。 生产中提供了多种高可用方案: k8s官方文档 本文安装的是1.28.0版本。 建议去认真阅读一下…...
普中STM32 单片机资料
普中科技–各型号开发板资料下载链接: ①普中-精灵1开发板: 百度网盘链接:https://pan.baidu.com/s/1Pa8Ep1xmg6uoq17O6Nwyyw?pwd=1234 提取码:1234 ②普中-ESP32开发板: 百度网盘链接:https://pan.baidu.com/s/16VthcbW27oEWp162H3bi6Q?pwd=1234 提取码:1234 一…...
docker报错
安装 docker报错: Docker Desktop requires the Server service to be enabled. 解决方法: 管理员身份打开cmd,输入: services.msc开启 server 服务。 docker启动报错: 打开 docker 界面报错: Docke…...

pytest分布式执行(pytest-xdist)
前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候,我们会用测试人力成本换取时间成本,这个时候多找个小伙伴把任务…...
spring和springBoot
Spring和Spring Boot小结 Spring和Spring Boot基于IOC AOP理念实现,Spring Boot集成了Spring。Spring框架: Spring框架解决了企业级的开发的复杂性,它是一个容器框架,用于装java对象(Bean),使程…...

laraval6.0 GatewayWorker 交互通信
laravel 6.0 GatewayWorker 通讯 开发前准备下载 GatewayWorker 及操作方式前端demo测试效果项目中安装GatewayClient 开发前准备 GatewayClient 官网:https://www.workerman.net/ 当前使用的是宝塔操作 下载 GatewayWorker 及操作方式 前端demo 测试效果 项目中安…...
循环神经网络RNN
1. 背景 RNN(Recurrent Neural Networks) CNN利用输入中的空间几何结构信息;RNN利用输入数据的序列化特性。 2. SimpleRNN单元 传统多层感知机网络假设所有的输入数据之间相互独立,但这对于序列化数据是不成立的。RNN单元用隐藏状态或记忆引入这种依赖…...
为什么预处理对象会提升处理的性能
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要环绕 “预处理对象会提升处理的性能” 这个问题做出解答以及关于预处理部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获ÿ…...
智能超声波雾化器pcba方案
一、超声波雾化器方案工作原理 超声波雾化器是一款基于电路板的振荡信号被大功率三极管进行能量放大,传递给压电陶瓷片,当压电陶瓷片受电信号的激励,产生高频谐振,并使吸附在微孔膜上的液体结产生超声振荡,将液体的结构…...
Git分支合并导致文件异常
昨天合并分支后,突然出现了项目中全部的文件出现异常。 先说结论:合并导致文件冲突处理异常,Git lfs 异常 解决方式:CMD 中执行 git lfs install git lfs pull。 合并分支后,发现项目中全部的png异常,编译a…...

Linux(11):Linux 账号管理与 ACL 权限设定
Linux 的账号与群组 每个登入的使用者至少都会取得两个 ID,一个是使用者 ID(User ID ,简称UID)、一个是群组ID (Group ID ,简称GID)。 Linux系统上面的用户如果需要登入主机以取得 shell 的环境来工作时,他需要如何进行呢? 首先…...

AMEYA360:村田首款1608M尺寸/100V静电容量1µF的MLCC实现商品化
株式会社村田制作所成功开发了用于基站、服务器和数据中心48V线路的多层陶瓷电容器“GRM188D72A105KE01”并已量产。该产品在1608M(1.60.8mm)尺寸、100V的额定电压下可实现1μF的超大静电容量(村田调查数据,截至2023年11月20日)。目前可向村田申请免费样品。 随着5G…...
简易键值对文本解析
除了json,xml,protobuf等成体系的配置文件外,简单的文本格式“key value”的配置文件也在很多开源项目中存在,这种配置文件的好处是简单、易于理解和编辑。 #include <stdio.h> #include <string.h>#define MAX_LINE_LENGTH 1024void Parse…...

成为AI产品经理——模型评估(混淆矩阵)
一、混淆矩阵 1.混淆矩阵的介绍 混淆矩阵有两个定义positive(正例)和negative(反例)。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。 为了便于理解&…...
Git_git相关指令 高阶
git config pull.rebase false git config pull.rebase false是做什么的_fury_123的博客-CSDN博客 git commit 命令详解_gitcommit_辰风沐阳的博客-CSDN博客...
PC企业微信http协议逆向接口开发,发送大视频文件
产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...

hyper-V操作虚拟机ubuntu 22.03
安装hyper-V 点击卸载程序 都勾选上即可 新建虚拟机,选择镜像文件 选择第一代即可 设置内存 配置网络 双击 启动安装虚拟机 输入用户名 zenglg 密码:LuoShuwen123456 按照enter键选中openssh安装 安装中 安装完成 选择重启 输入用户名、密码...

Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具
Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具 名称: spring 命令执行 (CVE-2022-22947) 描述: Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问A…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...

轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
做RAG自己打算使用esmilvus自己开发一个,安装时好像网上没有比较新的安装方法,然后找了个旧的方法对应试试: 🚀 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana,适配中文搜索…...