深入探究iframe:网页嵌入的魔法盒子(下)

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 四、iframe 的安全问题
    • iframe 的跨站脚本攻击(XSS)
    • iframe 的点击劫持攻击
    • iframe 的内容安全策略(CSP)
  • 五、iframe 的性能问题
    • iframe 的加载性能
    • iframe 的内存泄漏问题
    • iframe 的资源共享问题
  • 六、iframe 的使用技巧
    • iframe 的通信技巧
    • iframe 的延迟加载技巧
    • iframe 的自适应技巧
  • 七、iframe 的替代方案
    • AJAX
    • Web Components

四、iframe 的安全问题

iframe 的跨站脚本攻击(XSS)

iframe 容易受到跨站脚本攻击(XSS)。
攻击者可以在 iframe 内容中插入恶意脚本,这些脚本可以访问和操作 iframe 所在的页面,从而获取敏感信息。

防范措施:

  • 使用 CSP(内容安全策略)来限制 iframe 内容的来源,避免加载不可信的第三方内容。
  • iframe 内容进行审查和验证,确保内容来源可靠。
  • 使用 X-Frame-Options 响应头,可以防止 iframe 内容被其他页面嵌套。

iframe 的点击劫持攻击

点击劫持攻击是通过欺骗用户点击以执行恶意操作的攻击方式
iframe 可以被用来放大点击事件的作用域,从而进行点击劫持攻击。

防范措施:

  • 使用 Pointer-Events 属性,可以禁用 iframe 内的点击事件。
  • 对用户输入进行验证和过滤,避免恶意输入。

iframe 的内容安全策略(CSP)

CSP 是用于防范 XSS 攻击的一种方法。CSP 会告诉浏览器允许使用的来源和内容类型。

设置 CSP:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; frame-ancestors 'self'">

上述代码会告诉浏览器,只允许同源的脚本在页面中执行,并且只允许同源的页面加载 iframe。

以上是 iframe 可能遇到的安全问题及其防范措施。在实际开发中,应该采取相应措施,确保 iframe 的安全。

五、iframe 的性能问题

iframe 的加载性能

iframe 可能会影响页面的加载性能。因为 iframe 是一个独立的文档,所以它的加载需要单独进行,这可能会导致页面的加载时间变长。

解决方法:

  • 使用 CSP(内容安全策略)来限制 iframe 内容的来源,只加载必要的数据,避免加载过多的不必要的数据。
  • 使用 lazy loading,即需要时才加载 iframe。

iframe 的内存泄漏问题

iframe 可能会导致内存泄漏。如果 iframe 内的页面有大量的 DOM 元素或者 JavaScript 对象,那么这些元素和对象可能会占用大量的内存,导致内存泄漏。

解决方法:

  • 定期检查和清理 iframe 内的页面,释放不再使用的资源。
  • 使用内存监控工具,及时发现和解决内存泄漏问题。

iframe 的资源共享问题

iframe 内的页面可能会受到同源策略的限制,无法加载其他域名的资源。这可能会导致一些性能问题,例如,无法加载 iframe 内的图片或者样式表等。

解决方法:

  • 使用 CSP(内容安全策略)来允许加载其他域名的资源。
  • 使用代理服务器,将其他域名的资源代理到 iframe 所在的域名下。

例如:

<iframe src="https://www.example.com" width="300" height="200"></iframe>

上述代码会在网页中嵌入一个宽度为 300 像素,高度为 200 像素的 iframe,该 iframe 加载 https://www.example.com 的内容。如果 iframe 内的内容需要加载其他域名的资源,可以通过 CSP 或者代理服务器来解决跨域问题。

六、iframe 的使用技巧

iframe 的通信技巧

iframe 内的页面与父页面进行通信比较困难,需要通过 JavaScript 进行跨域操作,而跨域操作在某些浏览器中可能受到限制。以下是一些通信技巧:

  • 使用 window.postMessage() 方法进行跨域通信。
  • 使用 JSONP 技术进行跨域通信。
  • 使用代理服务器进行跨域通信。

例如,使用 window.postMessage() 方法进行跨域通信:

parent.window.postMessage('Hello', 'http://example.com');

iframe 的延迟加载技巧

iframe 内的页面可以延迟加载,即需要时才加载。这样可以避免页面加载过多的不必要的数据,提高加载速度。以下是一些延迟加载技巧:

  • 使用 IntersectionObserver 接口进行懒加载。
  • 使用滚动事件进行懒加载。
  • 使用请求头预加载。

例如,使用 IntersectionObserver 接口进行懒加载:

const observer = new IntersectionObserver((entries, observer) => {entries.forEach(entry => {if (entry.isIntersecting) {const iframe = document.createElement('iframe');iframe.src = 'https://www.example.com';entry.target.appendChild(iframe);observer.unobserve(entry.target);}});
});observer.observe(document.querySelector('#container'));

iframe 的自适应技巧

iframe 的大小可以根据其内容自动调整。以下是一些自适应技巧:

  • 使用 CSS 媒体查询进行自适应。
  • 使用 JavaScript 动态调整 iframe 的大小。
  • 使用 iframe 的 contentWindow.document.body.scrollHeight 属性来获取 iframe 内容的高度,然后调整 iframe 的大小。

例如,使用 JavaScript 动态调整 iframe 的大小:

function resizeIframe(iframe) {iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 'px';
}const iframe = document.querySelector('iframe');
resizeIframe(iframe);

在实际开发中,可以根据需要灵活运用这些技巧,提高 iframe 的性能和用户体验。

七、iframe 的替代方案

AJAX

AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容的技术。使用 AJAX 可以避免使用 iframe,从而提高页面性能和用户体验。

例如,使用 AJAX 加载数据并更新页面:

fetch('https://www.example.com/data').then(response => response.json()).then(data => {const targetElement = document.querySelector('#target');targetElement.innerHTML = data;});

Web Components

Web Components 是 HTML5 的一个子集,它提供了一种更灵活和可扩展的方式来实现跨文档通信和模块化。使用 Web Components 可以替代 iframe,从而提高页面性能和用户体验。

例如,使用 Web Components 加载数据并更新页面:

<template id="template"><style>/* 样式 */</style><div><!-- 内容 --></div>
</template><script>class MyComponent extends HTMLElement {constructor() {super();const template = document.getElementById('template');this.attachShadowRoot(template.content);}}customElements.define('my-component', MyComponent);
</script><my-component id="target"></my-component>

在实际开发中,可以根据项目需求和兼容性选择合适的替代方案。通常情况下,推荐使用 AJAX 和 Web Components 作为 iframe 的替代方案。

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

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

相关文章

DATAX改造支持geometry类型数据同步

数据库使用postgresql安装了postgis插件存储了geometry空间数据&#xff0c;想使用datax做数据同步&#xff0c;但datax本身不支持geometry类型数据&#xff0c;如何改造呢&#xff1f; 1.首先下载已改造支持geometry类型的datax引擎&#xff0c;下载地址 https://download.c…

Jmeter性能测试: Jmeter 5.6.3 分布式部署

目录 一、实验 1.环境 2.jmeter 配置 slave 代理压测机 3.jmeter配置master控制器压测机 4.启动slave从节点检查 5.启动master主节点检查 6.运行jmeter 7.观察jmeter-server主从节点变化 二、问题 1.jmeter 中间请求和响应乱码 一、实验 1.环境 &#xff08;1&#…

oracle数仓rac两个节点查询耗时不一致问题处理

问题描述 数据库节点1查询比节点2查询慢。现场操作应用发现发现同一sql语句在节点2上只要2分钟左右&#xff0c;在节点1&#xff0c;该条sql执行要超过30分钟。 处理过程 根据问题&#xff0c;初步判断是由于错误的执行计划&#xff0c;导致性能问题&#xff0c;但实际上对两…

编程流程图

对于复杂流程&#xff0c;我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下&#xff1a; processOn&#xff1a; 这个是我之前 一直的选择&#xff0c;他可以画上面的这些&#xff0c;流程图&#xff0c;网页操作&#xff0c;但是他不是免费的&#xff0c;查过…

JavaScript事件冒泡和捕获

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 事件传播是JavaScript中非常重要的一个概念,它描述了从嵌套元素到祖先…

【C++干货铺】哈希结构在C++中的应用

目录 unordered系列关联式容器 unordered_map unordered_map的接口说明 1.unordered_map的构造 2. unordered_map的容量 3. unordered_map的迭代器 4. unordered_map的元素访问 5. unordered_map的查询 6. unordered_map的修改操作 7. unordered_map的桶操作 底层结构 …

mysql+node.js+html+js完整扫雷项目

一.下载 可以直接下载绑定资源&#xff0c; 也可以访问&#xff1a;克隆仓库&#xff1a;mine_clearance: mysqlnode.jshtmljs完整扫雷项目 (gitee.com) 二.运行sql数据文件 将mysql数据文件导入到本地 先在本地localhost里创建数据库 mine_clearance&#xff0c; 然后如图&…

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索 效果图定义子组件父组件应用 效果图 定义子组件 主要结合el-select和el-tree两个组件改造的。 <template><div class"selectTree"><el-select filterable :filter-method"filterMe…

微软给Windows 11增添了一个由AI支持的‘Voice Clarity’功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

linux搭建jupyter

查看虚拟环境 conda info --envs进入虚拟环境 conda activate my_env pip install jupyter pip install ipykernel1. jupyter notebook启动 1.1 创建临时jupyter notebook任务 jupyter notebook --ip0.0.0.0 --no-browser --allow-root --notebook-dir/home/xxx1.2 jupyter…

共用体与枚举法,链表的学习

结构体注意事项&#xff1a; 1.结构体类型可以定义在main函数里面&#xff0c;但是此时的作用域就被限定在该函数中 2.结构体的的的定义的形式&#xff1a;a.先定义类型&#xff0c;后定义变量-----struct stu s b.定义类型的同时&#xff0c;定义了变量&#xff1a;struct…

Notion 开源替代品:兼容 Miro 绘图 | 开源日报 No.162

toeverything/AFFiNE Stars: 25.6k License: NOASSERTION AFFiNE 是下一代知识库&#xff0c;将规划、排序和创建集于一身。它是一个注重隐私、开源、可定制且即插即用的替代方案&#xff0c;可以与 Notion 和 Miro 相媲美。主要功能和优势包括&#xff1a; 超融合&#xff1…

本地部署GeoServe服务并结合内网穿透实现任意浏览器远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

【RT-DETR有效改进】利用YOLO-MS的MSBlock模块改进ResNet中的Bottleneck(RT-DETR深度改进)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块),我们将其用于替换我们ResNet中Basic组合出一种新的结构,来替换我们网络中的…

Spring Boot 整合 Redis 使用教程

作为开发者&#xff0c;相信大家都知道 Redis 的重要性。Redis 是使用 C 语言开发的一个高性能键值对数据库&#xff0c;是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。 Redis 以超…

PyTorch复现网络模型VGG

VGG 原论文地址&#xff1a;https://arxiv.org/abs/1409.1556VGG是Visual Geometry Group&#xff08;视觉几何组&#xff09;的缩写&#xff0c;它是一个在计算机视觉领域中非常有影响力的研究团队&#xff0c;主要隶属于牛津大学的工程系和科学系。VGG以其对卷积神经网络&am…

Vue3_基础使用

vue2的选项式与vue3的组合式区别&#xff1a; 选项式&#xff1a;vue2中数据与方法计算属性等等&#xff0c;针对一个数据的处理在不同的配置中&#xff0c;当业务复杂时很难维护&#xff0c;修改起来也不好查找。 vue3的组合式&#xff1a;将针对数据的方法计算属性等等放在一…

FPGA高端项目:Xilinx Zynq7020系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本本方案的Xilinx Artix7系列…

深度解读 BigANN 2023 四大赛题,向量搜索还有更好的解决方案?

近年来&#xff0c;向量搜索大赛 BigANN 一直是行业关注的焦点。原因在于&#xff0c;BigANN 不仅是在向量搜索领域具有强大影响力的比赛&#xff0c;开发者在赛后贡献出的相关解决方案更是行业进步与发展的重要动力。 向量检索大赛 BigANN 旨在提升大规模 ANN 的研究创新和生产…