iframe的使用详解

       

目录

一、基本概念和语法

二、优点

1.内容整合与复用:

2.独立的浏览环境:

3.跨域数据展示:

三、缺点

1.可访问性问题:

2.性能问题:

3.安全风险:

四、替代方案

1.使用JavaScript框架进行组件化开发:

2.使用服务器端渲染(SSR):

3.使用Web Components:

五、使用示例


目前流行的三大框架已经不太用到iframe(内联框架)这个HTML元素,但是还有些历史比较悠久的老项目还在使用JQuery或者原生js,这个时候就可能需要用到iframe了,如果你对这个不太了解的话,不妨通过以下介绍及案例学习下。

一、基本概念和语法

        iframe是 HTML 中的一个元素,用于在一个网页中嵌入另一个网页。其基本语法如下:

<iframe src="嵌入的网页地址" width="宽度值" height="高度值" frameborder="边框属性值(0 表示无边框)"></iframe>

        例如:

<!DOCTYPE html>
<html>

<body>

  <h2>使用 iframe 嵌入网页</h2>

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

</body>

</html>

        在这个例子中,一个宽度为 500 像素、高度为 300 像素且无边框的iframe被嵌入到当前网页中,显示了https://www.example.com的内容。

二、优点

1.内容整合与复用:

        可以轻松地将来自不同源的内容整合到一个页面中。比如,你可以在企业内部管理系统的页面中嵌入外部的地图服务、视频平台或其他第三方应用,为用户提供更丰富的功能和信息,而无需在自己的系统中重新开发这些功能。

        对于一些常用的功能模块,如用户登录框、广告展示等,可以在一个独立的页面中开发,然后通过iframe在多个不同的页面中复用,提高开发效率和代码的可维护性。

2.独立的浏览环境:

        iframe中的内容在一定程度上与主页面相互独立。这意味着嵌入的网页可以有自己的样式、脚本和交互逻辑,不会与主页面的代码产生直接冲突。例如,嵌入的网页可以使用不同的 JavaScript 框架或库,而不会影响主页面的正常运行。

        对于一些需要在特定环境中运行的内容,如旧版的网页应用或使用特定技术栈开发的页面,iframe可以提供一个相对隔离的环境,确保其能够正常显示和运行。

3.跨域数据展示:

        在某些情况下,iframe可以用于展示来自不同域的内容,而无需进行复杂的跨域请求处理。例如,一些数据分析平台可以通过iframe将生成的报表嵌入到客户的企业管理系统中,实现数据的可视化展示。

        虽然跨域的iframe之间存在一些安全限制,但可以通过一些技术手段,如使用postMessage方法进行跨域通信,实现数据的传递和交互。

三、缺点

1.可访问性问题:

        iframe可能会给有特殊需求的用户带来访问障碍。例如,屏幕阅读器等辅助技术可能难以正确处理iframe中的内容,导致视障用户无法获取完整的信息。这是因为iframe中的内容对于辅助技术来说可能是一个相对独立的区域,需要额外的处理才能被识别和访问。

        对于一些依赖键盘导航的用户,iframe也可能会造成困扰。例如,当用户在主页面中使用键盘导航时,可能无法直接进入iframe中的内容,需要额外的操作才能切换到iframe的焦点。

2.性能问题:

        加载多个iframe可能会导致页面加载速度变慢。这是因为每个iframe都相当于一个独立的网页,需要单独加载其资源,包括 HTML、CSS、JavaScript 和图片等。如果嵌入的网页较大或加载时间较长,会显著影响整个页面的加载性能。

        此外,iframe的存在可能会增加浏览器的内存占用,尤其是当多个iframe同时存在时,可能会导致浏览器性能下降,甚至出现卡顿或崩溃的情况。

3.安全风险:

        iframe可能会引入安全风险,因为嵌入的页面可能来自不可信的源。如果嵌入的网页被恶意攻击者篡改,可能会在主页面中执行恶意脚本,窃取用户的敏感信息或进行其他恶意操作。

        跨域的iframe之间也存在一些安全限制,以防止恶意网站通过iframe进行跨站脚本攻击(XSS)或其他安全攻击。但这些限制也可能会影响合法的跨域交互需求,需要开发人员进行额外的安全处理和测试。

四、替代方案

随着前端技术的发展,有一些替代iframe的方法:

1.使用JavaScript框架进行组件化开发:

        现代 JavaScript 框架如 React、Vue.js 和 Angular 等提供了强大的组件化开发模式。通过这些框架,开发人员可以创建可复用的组件,这些组件可以在一个页面中动态加载和渲染,而无需使用iframe。

        例如,在 React 中,可以使用React Router实现页面的路由管理,通过动态加载不同的组件来模拟iframe的功能。这样可以提高页面的性能和可维护性,同时避免了iframe带来的一些安全和可访问性问题。

2.使用服务器端渲染(SSR):

        服务器端渲染是一种将网页在服务器端生成 HTML 后再发送到客户端的技术。通过服务器端渲染,可以将不同的页面片段合并成一个完整的页面,减少对iframe的依赖。

        例如,在 Node.js 环境中,可以使用服务器端渲染框架如 Next.js 或 Nuxt.js,将多个页面的内容在服务器端进行组合和渲染,然后发送到客户端。这样可以提高页面的加载速度和 SEO 优化效果,同时也可以更好地控制页面的内容和布局。

3.使用Web Components:

        Web Components 是一种新的 Web 标准,它允许开发人员创建自定义的 HTML 元素,可以在不使用iframe的情况下实现模块化的开发。

        Web Components 由三个主要技术组成:自定义元素(Custom Elements)、Shadow DOM 和 HTML Templates。通过这些技术,开发人员可以创建可复用的、封装良好的组件,这些组件可以在不同的网页中使用,并且具有良好的可维护性和可扩展性。

        例如,可以使用 Web Components 创建一个自定义的视频播放器组件,然后在多个网页中使用这个组件,而无需使用iframe来嵌入外部的视频播放器。

五、使用示例

以下是一个使用iframe的示例,包括对iframe的一些控制和获取变量的方法:

<!DOCTYPE html>
<html>

<body>

  <h2>使用 iframe 嵌入网页并进行控制和变量获取</h2>

  <iframe id="myIframe" src="https://www.example.com" width="500" height="300" frameborder="0"></iframe>

  <button onclick="changeIframeSrc()">更改 iframe 源</button>
  <button onclick="getIframeContent()">获取 iframe 内容</button>

  <script>
    // 更改 iframe 的源
    function changeIframeSrc() {
      var iframe = document.getElementById('myIframe');
      iframe.src = 'https://www.another-example.com';
    }

    // 获取 iframe 中的内容
    function getIframeContent() {
      var iframe = document.getElementById('myIframe');
      var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
      var iframeContent = iframeDocument.body.innerHTML;
      console.log(iframeContent);
    }
  </script>

</body>

</html>

        在这个示例中,有一个iframe元素和两个按钮。第一个按钮用于更改iframe的源,点击按钮时,调用changeIframeSrc函数,通过获取iframe元素并修改其src属性来实现。第二个按钮用于获取iframe中的内容,点击按钮时,调用getIframeContent函数,首先获取iframe元素,然后通过contentDocumentcontentWindow.document获取iframe的文档对象,最后获取iframe文档的body元素的innerHTML属性,即iframe中的内容,并将其输出到控制台。

       此外,还可以使用postMessage方法在不同域的iframe之间进行通信。例如:

<!DOCTYPE html>
<html>

<body>

  <h2>使用 iframe 进行跨域通信</h2>

  <iframe id="myIframe" src="https://another-domain.com" width="500" height="300" frameborder="0"></iframe>

  <button onclick="sendMessageToIframe()">向 iframe 发送消息</button>

  <script>
    // 向 iframe 发送消息
    function sendMessageToIframe() {
      var iframe = document.getElementById('myIframe');
      iframe.contentWindow.postMessage('Hello from parent page!', 'https://another-domain.com');
    }

    // 监听来自 iframe 的消息
    window.addEventListener('message', function(event) {
      if (event.origin === 'https://another-domain.com') {
        console.log('Received message from iframe: ' + event.data);
      }
    });
  </script>

</body>

</html>

         在这个示例中,有一个iframe元素和一个按钮。点击按钮时,调用sendMessageToIframe函数,通过postMessage方法向iframe发送消息,指定消息内容和目标域。同时,使用window.addEventListener监听message事件,当接收到来自特定域的消息时,将消息内容输出到控制台。

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5G AMR市场调研:前五大厂商占比大约有58.7%的市场份额

5G AMR是指利用5G网络技术来增强移动机器人的通信和控制能力。它结合了高速低延迟的5G通信特性&#xff0c;支持实时数据传输和远程操作&#xff0c;以提升移动机器人在工业自动化和服务领域的应用效率和灵活性。通过5G AMR&#xff0c;机器人可以更快速地响应指令、处理数据&a…

115.WEB渗透测试-信息收集-ARL(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;114.WEB渗透测试-信息收集-ARL&#xff08;5&#xff09; httpd就是apache环境&#xff0…

【AWS AMI跨境备份】跨境使用 S3 备份和还原 AMI 镜像

文章目录 一、实验场景二、实验目标三、实验架构图四、涉及到AWS服务五、演示操作5.1 创建EC2实例5.2 创建映像5.3 备份AMI至Global S35.4 复制AMI从Global S3至 CN S35.5 还原AMI5.6 测试AMI 六、参考链接 一、实验场景 将 AWS Global区域的EC2实例备份至 AWS CN区域。 备份…

vue2使用pdfjs-dist实现pdf预览(iframe形式,不修改pdfjs原来的ui和控件)

前情提要 在一开始要使用pdf预览的时候&#xff0c;第一次选的是vue-pdf&#xff0c;但是vue-pdf支持的功能太少&#xff0c;缺少了项目中需要的一项-复制粘贴功能 之后我一顿搜搜搜&#xff0c;最终貌似只有pdfjs能用 但是网上支持text-layer的貌似都是用的2.09那个版本。 使…

C# 实现调用函数,打印日志(通过反射代理、非IOC)

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C# &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff…

常用代码整理

字符串操作相关函数的实现 gets puts strlen strcat strncat strcpy strncpy strcmp strncmp memcpy 内存大小端判断 类型强制转换 联合 排序 选择排序 冒泡排序 插入排序 快速排序 先选一个基准值&#xff0c;通过双指针扫描并交换元素将数组划分为两部分&#xff0c;左…

Go程序的一生——Go如何跑起来的?

引入编译链接概述 编译过程 词法分析语法分析语义分析中间代码生成目标代码生成与优化链接过程Go 程序启动GoRoot 和 GoPathGo 命令详解 go buildgo installgo run总结参考资料 引入 我们从一个 Hello World 的例子开始&#xff1a; package mainimport "fmt"func…

Spring Boot框架下JavaWeb在线考试系统的创新实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

基于机器学习的心脏病风险评估预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 心脏病是全球范围内导致死亡的主要原因之一。早期识别和预防心脏病对于减少发病率和死亡率至关重要。传统的风险评估方法通常依赖于医生的经验和简单的风险因子计算&#xff0c;这种方法存在一定的…

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能&#xff0c;支持文本和二进制文 件。 QFile 继承自 QIODevice &#xff0c;因此它可以像其他IO设备一样使用。 主要功能 文件读写&#xff1a; QFile 支持打开文件进行读取或写入操作文件信息&#x…

SCI论文快速排版:word模板一键复制样式和格式【重制版】

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间SCI论文快速排版&#xff1a;word模板一键复制样式和格式&#xff1a;视频操作视频重置版2【推荐】 SCI论文快速排版&#xff1a;word模板一键复制样式和格式【重制版】 模板与普通文档的区别 为了让读者更好地…

VHDL基本结构和逻辑示例

VHDL基本结构和逻辑示例 1.VHDL的基本结构 VHDL的基本结构包含了三段&#xff1a; -- library and package -- entity -- architecturelibrary and package&#xff1a;相关库和软件包&#xff08;相当与c语言的头文件&#xff09; entity&#xff1a;实体&#xff08;描述输…

redis IO多路复用机制

目录 一、五种 I/O 模型 1.阻塞IO&#xff08;Blocking IO&#xff09; 2.非阻塞IO&#xff08;Nonblocking IO&#xff09; 3.IO多路复用&#xff08;IO Multiplexing&#xff09; 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO&#xff08;Signal Driven …

QT 实现按钮多样化

1.界面实现效果 以下是具体的项目需要用到的效果展示&#xff0c;可以根据需要&#xff0c;实例化想要的按钮。 2.简介 原理&#xff1a;使用Qt的QPropertyAnimation动画类&#xff0c;这里简单来说就是切换两个按钮样式。 请看以下结构体&#xff1a; #define MAX_LINE_C…

系统架构设计师⑧:软件工程-软件开发方法与模型

系统架构设计师⑧&#xff1a;软件工程-软件开发方法与模型 软件开发方法 常用的软件开发方法主要分为3类&#xff1a; 结构化法&#xff08;比如C语言开发-面向过程&#xff09;&#xff0c; 面向对象法&#xff08;比如C或者JAVA开发-面向对象&#xff09;&#xff0c; 面向…

Nodejs和C#使用ECDH算法交换秘钥

转载于&#xff1a;https://bkssl.com/document/nodejs-csharp-ecdh.html nodejs的ECDH算法在进行computeSecret的时候不会自动进行HASH运算&#xff0c;但C#的ECDH算法必须指定HASH算法。 两边算法必须使用相同的椭圆曲线和Hash算法&#xff0c;例如下面用例都是用的SHA256。…

Matlab|用于平抑可再生能源功率波动的储能电站建模及评价

目录 主要内容 模型研究 1.目标函数 2.约束条件 部分代码 结果一览 1.储能平抑风电功率 2.储能平抑风电和光伏功率 下载链接 主要内容 程序参考文献《用于平抑可再生能源功率波动的储能电站建模及评价》&#xff0c;针对风电和光伏分布式能源出力波动的问…

题目:连续子序列

解题思路&#xff1a; 首先&#xff0c;不能使用暴力枚举&#xff0c;时间为O(n2)&#xff0c;超时。以下为正确做法&#xff1a; 假设找到一段区间&#xff08;其和>m&#xff09;&#xff0c;如上图黄色部分&#xff0c;那么该区间加上i后面的元素形成的新区间和都>m&a…

opencv学习:CascadeClassifier和detectMultiScale算法进行人脸识别

CascadeClassifier CascadeClassifier 是 OpenCV 提供的一个用于对象检测的类&#xff0c;它基于Haar特征和AdaBoost算法。它能够识别图像中的特定对象&#xff0c;比如人脸、眼睛、微笑等。CascadeClassifier 需要一个预训练的XML分类器文件&#xff0c;该文件包含了用于检测…

CodeActAgent :Executable Code Actions Elicit Better LLM Agents解读

论文地址 https://arxiv.org/pdf/2402.01030.pdf 项目地址 https://github.com/svjack/CodeActAgent-Gradio/blob/main/README.md 代码智能体的优势 选择代码智能体有以下几个关键原因&#xff0c;它们相较于使用类似JSON的字典输出具有显著优势&#xff1a; 1. 代码的高…