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)
      //新的下载方法结束
      return
      const 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.mfbz.cn/a/152666.html

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

相关文章

opencv(2): 视频采集和录制

视频采集 相关API VideoCapture()cap.read()&#xff1a; 返回两个值&#xff0c;第一个参数&#xff0c;如果读到frame&#xff0c;返回 True. 第二个参数为相应的图像帧。cap.release() VideoCapture cv2.VideoCapture(0) 0 表示自动检测&#xff0c;如果在笔记本上运行&…

CCF-C类 | 仅1个月Accept!中科院2区SCI,Elsevier出版社,审稿快易录用!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是一本CCF-C类、审稿快易录用&#xff0c;且对国人相当友好的SCI期刊&#xff0c;其详情及如下&#xff1a; 期刊简介 IMAGE AND VISION COMPUTING ISSN&#xff1a;0262-8856 E-ISSN&#xff1a;1872-8138 IF&#x…

2023亚太杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

火山引擎ByteHouse:4000字总结,Serverless在OLAP领域应用的五点思考

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作为云计算的下一个迭代&#xff0c;Serverless可以使开发者更专注于构建产品中的应用&#xff0c;而无需考虑底层堆栈问题。伴随着近年来相关技术成熟度的增加&…

数据库系统概述之数据库分类

你用过或者了解的数据库都有哪些&#xff1f; 数据库最新统计数量约404个&#xff08;https://db-engines.com/en/ranking&#xff09; 排名前20的数据库管理系统&#xff1a; 未完待续&#xff0c;喜欢的点赞收藏转发&#xff0c;如有疑问&#xff0c;点击链接加入群聊【信创…

安装虚拟机

Windows Windows 2008 Windows 2012 Windows 2016 Linux 系统&#xff08;centos redhat ubuntu 银河麒麟 中标麒麟 统信UOS&#xff09; 安装虚拟机 右键新建虚拟机 选择自定义下一步 下一步 稍后安装操作系统&#xff0c;选择下一步 选择linux 选…

达梦数据库常用参数查询

字符集 字符是各种文字和符号的统称&#xff0c;包括各个国家文字、标点符号、表情、数字等等。 字符集 就是一系列字符的集合。字符集的种类较多&#xff0c;每个字符集可以表示的字符范围通常不同&#xff0c;就比如说有些字符集是无法表示汉字的。 常见的字符集有 ASCII、G…

1亿美元投资!加拿大量子公司Photonic告别隐身状态

​&#xff08;图片来源&#xff1a;网络&#xff09; 至今加拿大量子公司Photonic总融资额已达1.4亿美元&#xff0c;将推动可扩展、容错的量子计算和网络平台的快速开发。 官宣完成1亿美元新一轮融资 Photonic总部位于加拿大不列颠哥伦比亚省温哥华市&#xff0c;是一家基…

云渲染的“公”“私”技术!

当下云渲染技术主要从以下两个方面进行赋能&#xff1a; 一、云渲染公有化结构--“云计算” 云渲染公有化结构是指三维应用云渲染服务&#xff0c;以自研云流送技术为核心&#xff0c;利用云端海量 GPU 算力资源处理繁重的图像渲染计算&#xff0c;并串流同步输出到终端设备从…

[C/C++]数据结构 链表OJ题:随机链表的复制

题目描述: 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新…

《QT从基础到进阶·三十四》qobject_cast动态强制转换

qobject_cast()对QObject类执行动态强制转换。 qobject_cast()函数的行为类似于标准c dynamic_cast()&#xff0c;但执行速度比dynamic_cast 更快&#xff0c;且不需要C的RTTI 的支持&#xff0c;但qobject_cast 仅适用于QObject 及其派生类。 如果对象的类型正确(在运行时确定…

人工智能基础_机器学习039_sigmoid函数_逻辑回归_逻辑斯蒂回归_分类神器_代码实现逻辑回归图---人工智能工作笔记0079

逻辑斯蒂回归(Logistic Regression)是一种常用的分类算法,其基本思想是通过拟合一个逻辑斯蒂函数来预测样本所属的类别。它广泛应用于各个领域,如医学、金融、市场营销等,具有较好的解释性和可解释性。在逻辑斯蒂回归中,我们通常使用的是二分类问题,即样本只属于两个类别…

Unity 2021 LTS / Unity 2022 LTS New Shader Graph Node 参考样本

Shader Graph团队很高兴地宣布发布新的节点参考样本&#xff0c;现在可用于2021 LTS, 2022 LTS和未来的版本。 节点参考样本是超过140个Shader图形资源的集合。您可以将这些图用作参考&#xff0c;以了解每个节点的作用及其工作原理&#xff0c;而不是在项目中使用这些图。每个…

XD6500S— LoRa SIP模块芯片 集成了射频前端和LoRa射频收发器SX1262 应用温湿度传感器 资产跟踪等

XD6500S是一系列LoRa SIP模块&#xff0c;集成了射频前端和LoRa射频收发器SX1262系列&#xff0c;支持LoRa和FSK调制。 收发器SX1262系列&#xff0c;支持LoRa和FSK调制。LoRa技术是一种扩频协议&#xff0c;针对LPWAN 应用的低数据速率、超远距离和超低功耗通信进行了优化。通…

YOLO 施工安全帽目标检测模型

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 头盔自动检测基本上是一个物体检测问题&#xff0c;可以使用深度学习和基于计算机视觉的方法来…

6.1810: Operating System Engineering <LEC 1>

课程链接&#xff1a;6.1810 / Fall 2023 一、本节任务 实验环境&#xff1a; 二、introduction and examples 2.1 open(), read(), write(), close(), dup() 使用 open 打开或创建文件&#xff0c;得到文件描述符 fd&#xff0c;再对 fd 进行 read 或者 write 操作。每个进…

神器推荐丨不可错过的10个3D模型素材库

如果你是一位设计师&#xff0c;那么你一定知道3D模型素材库对你的工作有着不可或缺的重要性。不论是创新的产品设计&#xff0c;惊艳的视觉特效&#xff0c;还是生动的角色建模&#xff0c;无不需要从各类3D模型素材库中选择适合的素材&#xff0c;来完成你的设计。那么&#…

《C++避坑神器·十六》函数默认参数和占位参数

C中函数是可以给默认参数的 注意点&#xff1a; &#xff08;1&#xff09;一旦某个参数设置为默认参数&#xff0c;那跟着后面的所有参数都必须设置默认参数 &#xff08;2&#xff09;函数的声明和定义只能有一个可以设置默认参数&#xff0c;两个都设置会报错 int f1(int a…

站群服务器 CentOS 搭建socks5多IP代理服务器详细教程,12个步骤教会你!

准备工作 首先要保证服务上能正常使用wget tar make vim&#xff0c;如果正常就直接进入【第一步】 #安装wget的命令 yum install wget#安装tar解压工具 yum install -y tar#安装make的命令 yum groupinstall "Development Tools"#安装vim的命令 yum install…

PDF/X、PDF/A、PDF/E:有什么区别,为什么有这么多格式?

PDF 是一种通用文件格式&#xff0c;允许用户演示和共享文档&#xff0c;无论软件、硬件或操作系统如何。多年来&#xff0c;已经创建了多种 PDF 子类型来满足各个行业的不同需求。让我们看看一些最流行的格式&#xff1a;PDF/X、PDF/A 和 PDF/E。 FastReport .net下载 PDF/X …
最新文章