iframe渲染后端接口文件和实现下载功能

一:什么是iframe?

1、介绍

       iframe 是HTML 中的一种标签,全称为 Inline Frame,即内联框架。它可以在网页中嵌入其他页面或文档,将其他页面的内容以框架的形式展示在当前页面中。iframe的使用方式是通过在HTML文档中插入标签,并设置相应属性来指定要嵌入的页面地址。例如:<iframe src="http://www.example.com">。通过这种方式,当前页面就会在指定位置显示嵌入的页面。

        就如上图所示,我们在页面里内联了一个PDF文档,其可以转为Word文档,包括打印、下载、双页预览等功能的实现。这些具体功能的实现主要是由后端来做技术支撑的。前端主要是将后端传来的文档渲染在我们的页面中。这个主要是通过 iframe 来完成的。下面让我们来看一下百度给的定义:

IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。

         通过这段文字,我们可以看到 iframe 是 html 自带的一个标签。也就是说我们可以直接使用而不需要去安装依赖等。同时我们可以对这个内联框架进行修改样式。让其展示成符合我们预期的东西。

提示:

  • HTML 与 XHTML 之间的差异:在HTML4.1 Strict DTD和XHTML1.0 Strict DTD中,不支持iframe元素。 
  • 可以把需要的文本放置在<iframe>和</iframe>之间,这样就可以应对无法理解iframe的浏览器。

 2、可选属性

属性

描述

align

left

right

top

middle

bottom

HTML5 不支持。HTML 4.01 已废弃。 规定如何根据周围的元素来对齐 <iframe>。

frameborder

1

0

HTML5 不支持。规定是否显示 <iframe> 周围的边框。

height

pixels

规定 <iframe> 的高度。

longdesc

URL

HTML5 不支持。规定一个页面,该页面包含了有关 <iframe> 的较长描述。

marginheight

pixels

HTML5 不支持。规定 <iframe> 的顶部和底部的边距。

marginwidth

pixels

HTML5 不支持。规定 <iframe> 的左侧和右侧的边距。

name

name

规定 <iframe> 的名称。

sandbox(#)

""

allow-forms

allow-same-origin

allow-scripts

allow-top-navigation

对 <iframe> 的内容定义一系列额外的限制。

scrolling

yes

no

auto

HTML5 不支持。规定是否在 <iframe> 中显示滚动条。

seamless(#)()

seamless

规定 <iframe> 看起来像是父文档中的一部分。

src

URL

规定在 <iframe> 中显示的文档的 URL。

srcdoc(#)

HTML_code

规定页面中的 HTML 内容显示在 <iframe> 中。

width

pixels

规定 <iframe> 的宽度。

 3、标准属性

核心属性

属性

描述

class

classname

规定元素的类名(classname)

id

id

规定元素的特定id

style

style_definition

规定元素的行内样式(inline style)

title

text

规定元素的额外信息(可在工具提示中显示)

语言属性

属性

描述

dir

ltr | rtl

设置元素中内容的文本方向。

lang

language_code

设置元素中内容的语言代码。

xml:lang

language_ code

设置XHTML文档中元素内容的语言代码。

键盘属性

属性

描述

accesskey

character

设置访问元素的键盘快捷键。

tabindex

number

设置元素的Tab键控制次序。

二:iframe 实现

1、html 部分

        这里是我们的 html 部分,可以看到使用了<iframe>标签,并且给 frameborder 边框属性设置为 0 。同时给了一个自适应最大的高和宽度。

<template><div><div style="display: flex;justify-content: center"><el-button @click="closeDialog">返回</el-button></div><div><el-button type="primary" @click="downloadPdf">下载pdf</el-button></div><div style="height: 100vh" ><iframe ref="iframeRef" :src="reportPath" frameborder="0" width="100%" height="100%"></iframe></div></div>
</template>

2、JS部分

         下面的话是我们项目中的JS部分,这里面是跟 iframe 有关的部分代码,在 created 生命周期中,我们拼接了 reportPath 文件的地址,这个是传给 html 部分的 src 属性。这样我们就可以将其展示在我们的页面上。

        同时写了一个 downloadPdf() 下载文件方法。并且给这个方法自定义了名字以及内部各式等。其绑定了 HTML 中 button 按钮。

import {dowloadPdf} from'@/utils/dowloadPdf'
import lang from '@/mixins/lang'
import html2pdf from 'html2pdf.js';
export default {name: 'detail',langPrefix: 'operationReportDayReport',mixins: [lang],props: ['data'],data() {return {reportPath: '',}},async created() {// 初始化文件的url地址const host = `${window.location.protocol}//${window.location.hostname}:${window.location.port}/files/`this.reportPath = host + this.data.reportPath},methods: {downloadPdf() {let loading = this.$loading({lock: true,text: '文件处理中,请稍后',spinner: 'el-icon-loading',background: 'rgba(0, 0, 0, 0.7)'});const iframe = this.$refs.iframeRef;const doc = iframe.contentDocument || iframe.contentWindow.document;const element = doc.documentElement;let fileName =  `${this.data.reportName}_${new Date().getTime()}.pdf`//新的下载方法开始dowloadPdf(this.reportPath,fileName,loading)//新的下载方法结束returnconst opt = {margin: [10, 10, 10, 10],  // 设置页面边距filename: fileName,  // 指定下载的文件名image: { type: 'jpeg', quality: 0.98 },  // 导出图片的格式和质量html2canvas: { scale: 2 },  // HTML 转换为 Canvas 的缩放比例jsPDF: { unit: 'pt', format: 'a4', orientation: 'portrait' }  // PDF 的尺寸和方向};html2pdf().set(opt).from(element).save();loading.close();},}
}

三:结尾

        iframe的主要作用是实现页面的嵌套和内容的分割。它可以在一个页面中同时展示多个其他页面的内容,使得网页的结构更加灵活多样。常见的应用场景包括:

  • 嵌入其他网页:通过iframe可以将其他网页的内容嵌入到当前页面中,实现跨域展示内容的功能。这在一些需要同时展示多个来源的信息的网站中非常常见。
  • 分割页面内容:通过iframe可以将页面的内容划分为多个部分,每个部分独立显示不同的页面内容。这样可以实现页面的模块化,方便管理和维护。
  • 弹出层:通过iframe可以实现弹出层的效果,即在当前页面上方以浮动的形式展示另一个页面的内容。这在一些需要实现弹窗、对话框等功能时非常有用。
  • 加载外部内容:通过iframe可以将外部的文档、视频、地图等内容嵌入到当前页面中,丰富页面的功能和展示效果。

        虽然iframe有很多有用的功能,但也存在一些问题和注意事项:

  • 安全性问题:由于iframe可以加载其他域下的页面,存在跨域脚本攻击的风险。为了保证网页的安全,浏览器会对iframe进行一些限制,如同源策略等。
  • SEO问题:搜索引擎对于iframe中的内容的处理不够友好,可能无法正确解析其中的文本和链接。这可能影响到网页的搜索排名和流量。
  • 页面加载性能:使用iframe会增加页面的加载时间,特别是在嵌入较大页面或资源时。因此,在使用iframe时需要注意页面性能的影响。

        总之,iframe是一种在HTML中嵌入其他页面或文档的标签,可以实现页面的嵌套和内容的分割。它的灵活性和功能丰富使得它在网页开发中得到广泛应用,但也需要注意安全性、SEO和性能等问题。

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

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

相关文章

Idea远程debug

Idea远程debug 一、方法 1.1、启动时加参数 java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar remote-debug-0.0.1-SNAPSHOT.jar1.2、运行时加参数 在没有显式-agentlib:jdwp参数的情况下进行远程调试&#xff1a; 首先&#xff0c;确保您的Sprin…

六.Linux远程登录

1.说明&#xff1a;公司开发的时候&#xff0c;具体的应用场景是这样的 1.linux服务器是开发小组共享 2.正式上线的项目是运行在公网 3.因此程序员需要远程登录到Linux进行项目管理或者开发 4.画出简单的网络拓扑示意图(帮助理解) 5.远程登录客户端有Xshell6、Xftp6&#xff0…

闭眼检测实现

引言 这段代码是一个实时眼睛状态监测程序&#xff0c;可以用于监测摄像头捕获的人脸图像中的眼睛状态&#xff0c;判断眼睛是否闭合。具体应用实现作用说明如下&#xff1a; 1. 实时监测眼睛状态 通过摄像头捕获的实时视频流&#xff0c;检测人脸关键点并计算眼睛的 EAR&a…

vue3项目安装eslint和prettier

【几乎最全/全网最长的 2 万 字】前端工程化完整流程&#xff1a;从头搭到尾&#xff08;vue3 vite qiankun docker tailwindcss iview......&#xff09;_前端工程化流程-CSDN博客 vue3tsvite项目中使用eslintprettierstylelinthusky指南 - 掘金 上面两篇文章相互结合操…

【Python大数据笔记_day10_Hive调优及Hadoop进阶】

hive调优 hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation hive命令和参数配置 hive参数配置的意义: 开发Hive应用/调优时&#xff0c;不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率&#xff0c;或帮助定位问…

MySQL 的执行原理(四)

5.5. MySQL 的查询重写规则 对于一些执行起来十分耗费性能的语句&#xff0c;MySQL 还是依据一些规则&#xff0c;竭尽全力的把这个很糟糕的语句转换成某种可以比较高效执行的形式&#xff0c;这个过程也可以 被称作查询重写。 5.5.1. 条件化简 我们编写的查询语句的搜索条件…

git常用命令和参数有哪些?【git看这一篇就够了】

文章目录 前言常用命令有哪些git速查表奉上常用参数后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;git操作相关 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

HCIA-综合实验(三)

综合实验&#xff08;三&#xff09; 1 实验拓扑2 IP 规划3 实验需求一、福州思博网络规划如下&#xff1a;二、上海思博网络规划如下&#xff1a;三、福州思博与上海思博网络互联四、网络优化 4 配置思路4.1 福州思博配置在 SW1、SW2、SW3 上配置交换网络SW1、SW2、SW3 运行 S…

记录一些涉及到界的题

文章目录 coppersmith的一些相关知识题1 [N1CTF 2023] e2Wrmup题2 [ACTF 2023] midRSA题3 [qsnctf 2023]浅记一下 coppersmith的一些相关知识 上界 X c e i l ( 1 2 ∗ N β 2 d − ϵ ) X ceil(\frac{1}{2} * N^{\frac{\beta^2}{d} - \epsilon}) Xceil(21​∗Ndβ2​−ϵ) …

贪吃蛇小游戏

一. 准备工作 首先获取贪吃蛇小游戏所需要的头部、身体、食物以及贪吃蛇标题等图片。、 然后&#xff0c;创建贪吃蛇游戏的Java项目命名为snake_game&#xff0c;并在这个项目里创建一个文件夹命名为images&#xff0c;将图片素材导入文件夹。 再在src文件下创建两个包&#…

【Go入门】 Go如何使得Web工作

【Go入门】 Go如何使得Web工作 前面小节介绍了如何通过Go搭建一个Web服务&#xff0c;我们可以看到简单应用一个net/http包就方便的搭建起来了。那么Go在底层到底是怎么做的呢&#xff1f;万变不离其宗&#xff0c;Go的Web服务工作也离不开我们第一小节介绍的Web工作方式。 w…

2023年【G1工业锅炉司炉】报名考试及G1工业锅炉司炉理论考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉报名考试是安全生产模拟考试一点通生成的&#xff0c;G1工业锅炉司炉证模拟考试题库是根据G1工业锅炉司炉最新版教材汇编出G1工业锅炉司炉仿真模拟考试。2023年【G1工业锅炉司炉】报名考试及G1工业锅炉…

简单聊一聊幂等和防重

大家好&#xff0c;我是G探险者。 每年的双十一&#xff0c;618&#xff0c;电商系统都会面临这超高的流量&#xff0c;如果一个订单被反复提交&#xff0c;那电商系统如何保证这个订单之后执行一次减库存&#xff0c;扣款的操作&#xff1f; 这里就引入两个概念&#xff0c;…

Python数据分析实战① Python实现数据可视化

文章目录 一、数据可视化介绍二、matplotlib和pandas画图1.matplotlib简介和简单使用2.matplotlib常见作图类型3.使用pandas画图4.pandas中绘图与matplotlib结合使用 三、订单数据分析展示四、Titanic灾难数据分析显示 一、数据可视化介绍 数据可视化是指将数据放在可视环境中…

aliyun Rest ful api V3版本身份验证构造

aliyun Rest ful api V3版本身份验证构造 参考官网&#xff1a;https://help.aliyun.com/zh/sdk/product-overview/v3-request-structure-and-signature?spma2c4g.11186623.0.0.787951e7lHcjZb 构造代码 &#xff1a;使用GET请求进行构造&#xff0c;算法使用sha256 使用postm…

动手学深度学习——循环神经网络的从零开始实现(原理解释+代码详解)

文章目录 循环神经网络的从零开始实现1. 独热编码2. 初始化模型参数3. 循环神经网络模型4. 预测5. 梯度裁剪6. 训练 循环神经网络的从零开始实现 从头开始基于循环神经网络实现字符级语言模型。 # 读取数据集 %matplotlib inline import math import torchfrom torch import …

sqli-labs关卡20(基于http头部报错盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第二十关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚…

【Linux】安全审计-audit

文章目录 一、audit简介二、开启auditd服务三、相关文件四、审计规则五、审计日志查询及分析附录1&#xff1a;auditctl -h附录2&#xff1a;systemcall 类型 参考文章&#xff1a; 1、安全-linux audit审计使用入门 2、audit详细使用配置 3、Linux-有哪些常见的System Call&a…

golang学习笔记——接口interfaces

文章目录 Go 语言接口例子空接口空接口的定义空接口的应用空接口作为函数的参数空接口作为map的值 类型断言接口值 类型断言例子001类型断言例子002类型断言例子003巩固练习 Go 语言接口 接口&#xff08;interface&#xff09;定义了一个对象的行为规范&#xff0c;只定义规范…

Java面向对象(高级)-- 类的成员之四:代码块

文章目录 一、回顾&#xff08;1&#xff09;三条主线&#xff08;2&#xff09;类中可以声明的结构及作用1.结构2.作用 二、代码块&#xff08;1&#xff09;代码块的修饰与分类1. 代码块的修饰2. 代码块的分类3. 举例 &#xff08;2&#xff09; 静态代码块1. 语法格式2. 静态…