iframe 是HTML 中的一种标签,全称为 Inline Frame,即内联框架。它可以在网页中嵌入其他页面或文档,将其他页面的内容以框架的形式展示在当前页面中。iframe的使用方式是通过在HTML文档中插入标签,并设置相应属性来指定要嵌入的页面地址。例如:
就如上图所示,我们在页面里内联了一个PDF文档,其可以转为Word文档,包括打印、下载、双页预览等功能的实现。这些具体功能的实现主要是由后端来做技术支撑的。前端主要是将后端传来的文档渲染在我们的页面中。这个主要是通过 iframe 来完成的。下面让我们来看一下百度给的定义:
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
通过这段文字,我们可以看到 iframe 是 html 自带的一个标签。也就是说我们可以直接使用而不需要去安装依赖等。同时我们可以对这个内联框架进行修改样式。让其展示成符合我们预期的东西。
提示:
属性 | 值 | 描述 |
---|---|---|
align | left right top middle bottom | HTML5 不支持。HTML 4.01 已废弃。 规定如何根据周围的元素来对齐 |
frameborder | 1 0 | HTML5 不支持。规定是否显示 |
height | pixels | 规定 |
longdesc | URL | HTML5 不支持。规定一个页面,该页面包含了有关 |
marginheight | pixels | HTML5 不支持。规定 |
marginwidth | pixels | HTML5 不支持。规定 |
name | name | 规定 |
sandbox(#) | "" allow-forms allow-same-origin allow-scripts allow-top-navigation | 对 |
scrolling | yes no auto | HTML5 不支持。规定是否在 |
seamless(#)() | seamless | 规定 |
src | URL | 规定在 |
srcdoc(#) | HTML_code | 规定页面中的 HTML 内容显示在 |
width | pixels | 规定 |
属性 | 值 | 描述 |
---|---|---|
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键控制次序。 |
这里是我们的 html 部分,可以看到使用了
- <template>
- <div>
- <div style="display: flex;justify-content: center">
- <el-button @click="closeDialog">返回el-button>
- div>
- <div>
- <el-button type="primary" @click="downloadPdf">下载pdfel-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是一种在HTML中嵌入其他页面或文档的标签,可以实现页面的嵌套和内容的分割。它的灵活性和功能丰富使得它在网页开发中得到广泛应用,但也需要注意安全性、SEO和性能等问题。