iframe简要介绍

简介: iframe简要介绍

iframe

专业来说iframe会创建包含另外一个文档的内联框架

通俗来说iframe可以将另外一个网页的内容嵌入在自己网页中

咱们来看看它的优点

可以直接引用其它页面展示在自己网站内容,节省开发和维护成本

咱们来看看它的缺点

1、页面中如果存在iframe元素,那么只有等待iframe元素及其内部的元素都加载完毕后,页面的onload事件才会触发,因此会造成onload事件的阻塞。如果iframe不是你页面主要显示的内容,那么请当页面其它元素加载完成,也就是onload事件执行的时候动态为iframe添加src

2、搜索引擎无法识别iframe中的内容,不利于网页的SEO

3、iframe和主页面共享连接池,而浏览器对相同域的连接有限制,会影响页面的并行加载

4、浏览器的后退前进对iframe页面交互无效

iframe元素的基本属性和事件

DOM结构如下:

<iframe id="xxx" name="xxx" width="200" height="200" src="xxx.com" sandbox="xxxx" >

name - 用于定位嵌入的浏览上下文的名称

width - iframe元素的宽度,默认值300

height - iframe元素的高度,默认值150

src - 请求资源地址

sandbox - 沙箱属性,ie9及以下不支持  

还有其它的属性,可以参考MDN进行使用

常用的事件比如onload事件,在iframe元素加载完成后触发

document.getElementById('xxx').onload = function() {  }

动态新增iframe标签

var iframeEle = docuemnt.createElement('iframe');

iframeEle.id = 'xxx';

iframeEle.style = 'width: 200px; height: 200px; border: 0;';

iframeEle.src = 'xxx.com';

document.body.append(iframeEle);

父子通信

1、父页面和iframe的src地址需要是同源,才能进行数据交互

2、根域名相同,二级域名不同,可以通过设置document.domain为同一个根域名来进行跨域交互

3、跨域交互,需要用到window.postMessage方法来进行数据交互


同源场景下:

父页面获取子页面window对象

document.getElementById('xxx').contentWindow

window.frames[x]

子页面获取父页面window对象

window.parent

根域名相同,二级域名不同

iframe页面(a.xxx.com)
    document.domain = 'xxx.com'
    
父页面(b.xxx.com)
    document.domain = 'xxx.com'
    

跨域交互

发送方进行消息发送,接收方通过监听message来获取发送内容

iframe页面(a.xxx.com)
    window.addEventListener('message', function(event) { 
        
        event.data  - 发送方传递的数据对象
        
        event.origin - 发送发的orgin
        
        event.source  - 发送方的window对象引用
        
     }, false)

父页面(b.yyy.com)

    document.getElementById('xxx').contentWindow.postMessage(message, targetOrgin, [transfer]);
    
    message - 发送的信息内容
    
    targetOrgin - 指定哪些窗口能收到此消息,所有源可设置为*
    
    transfer - 该参数可选,可忽略
    

注意事项

  • iframe内部使用window.history.go(xx)和window.history.back()和在父页面使用是一样的效果
  • iframe内部使用window.location.href不会改变浏览器的url,但是会新增一条历史记录
  • iframe的每次重载,都会引起父页面onload事件的触发

参考文档

MDN - iframe

思否 - Iframe简单探索以及Iframe跨域处理 - maxxz

目录
相关文章
|
缓存 Kubernetes Docker
kubernetes 部署工具:sealos(2)
kubernetes 部署工具:sealos(2)
kubernetes 部署工具:sealos(2)
|
负载均衡 数据库连接 Linux
confluence与jira部署详解
confluence与jira部署详解
confluence与jira部署详解
|
3月前
|
机器学习/深度学习 人工智能 算法
AI可以做电商主图了:技术原理,AI电商图生成工具对比及技术解析
双十一临近,电商主图需求激增。AI技术凭借多图融合、扩散模型等,实现高效智能设计,30秒生成高质量主图,远超传统PS效率。支持风格迁移、背景替换、文案生成,助力商家快速打造吸睛商品图,提升转化率。
1012 0
|
前端开发 UED 开发者
React 日期选择器 Date Picker
本文从React的角度探讨了日期选择器的使用方法,包括使用`react-datepicker`库的基本配置、自定义样式、国际化设置、常见问题及解决方案,旨在帮助开发者构建用户友好的日期选择组件。
452 12
|
12月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
701 9
|
Python Windows
Python安装第三方库太慢?配置好这个速度飞起
Python安装第三方库太慢?配置好这个速度飞起
648 1
|
人工智能 监控 安全
AI计算机视觉笔记十三:危险区域识别系统
本文介绍了如何在 IPC 监控视频中实现区域入侵检测,通过 YOLOv5 和 ByteTrack 实现人物检测与多目标跟踪。系统能在检测到人员进入预设的危险区域时发出警报,保障安全。主要步骤包括:1)使用 YOLOv5 识别人物;2)使用 ByteTrack 进行多目标跟踪;3)利用射线法判断物体是否进入禁区内。项目基于 Python 开发,使用海思、君正、RK 等摄像头模组,代码已在 RV1126 上验证,计划移植至 RK3568 平台。项目结构清晰,包含模型训练、跟踪算法及图形化界面展示等功能。
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
1073 0
使用vscode开发C#+unity没有代码提示问题
|
Arthas 存储 监控
性能监控之常见 Java Heap Dump 方法
【6月更文挑战8天】性能监控之常见 Java Heap Dump 方法
911 7
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(二)
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法
做了多年开发的你发现自己的水平一直上不去,一篇文章教你如何提高开发水平的方法(二)

热门文章

最新文章