Vue中嵌套标签iframe的使用

本文详细介绍Vue项目中iframe的应用,包括动态调整高度、不同嵌入方式及直接设置链接等实用技巧,帮助开发者更好地掌握iframe的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前端开发:Vue中嵌套标签iframe的使用 - 腾讯云开发者社区-腾讯云

前言

在前端开发过程中,往原有页面中嵌入新的页面的需求也是比较常见的需求操作,尤其是在比较复杂的必须要用嵌套的场景下。前端中使用嵌套的时候,需要用到的就是iframe标签,通过该标签可以规定一个内联框架,然后放入需要嵌套的新页面即可。本篇博文来分享一下关于iframe的使用方法,尤其是对于初级开发者来说尤为重要。

一、iframe

1、定义和使用

<iframe> 标签规定一个内联框架,一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

2、使用说明

1)可以把需要的文本放置在 <iframe> 和 </iframe> 二者之间,这样就可以应对不支持 <iframe> 的浏览器了;

2)通过使用 CSS 给 <iframe> 定义需要的样式;

(3)<iframe> 标签支持HTML的全局属性、事件属性、以及HTML5的新属性。

3、其他注意事项

通过网页使用iframe嵌入新的网页的时候,有时需要动态处理src的值,而不是固定的值,这就需要给iframe 的src赋值,通常是使用js来实现。

4、使用实例

根据实际开发过程中的不同需求,把实战中比较常见的处理方式汇总出来,需求是做不完的,也不可能全部覆盖到,这里只分享一些比较常见的操作,方便有需要的开发者查阅使用,具体的实例如下所示。

1.iframe使用:根据数据自动增长页面的高度设置

<div style="padding-top:10px;">
  <iframe id=“frame”  src=""  onload="Javascript:setHeight(this)" style="width: 100%;border: 0px;margin:0;display: none"></iframe>
</div>
function setHeight(obj){
  var w=obj;
  if (document.getElementById){
    if (w && !window.opera){
      if (w.contentDocument && w.contentDocument.body.offsetHeight){
        w.height = w.contentDocument.body.offsetHeight+40;
      }else if(w.Document && win.Document.body.scrollHeight){
          w.height = win.Document.body.scrollHeight+40;
      }
    }
}

2.iframe使用:两种不同的嵌入新页面的方式

<div style="padding-top:10px;">
  <iframe id=“frame”   style="width: 100%;border: 0px;margin:0;display: none"></iframe>
</div>

方法一:通过一个方法,将新页面的链接放入到iframe中

function preview(frame) {
    var myIframe = $("#frame");
    var url= basePath + "/base/commonFileUpload/preview?id="+frame+"&split=1";
    $('#frame').attr('src', url);


}

方法二:如果是直接打开一个新窗口展示url生成的页面

window.open(basePath + "/base/commonFileUpload/preview?id="+frame+"&split=1");

3.iframe使用:直接设置嵌入新页面链接的方式

<template>
    <div slot="body" class="container offset-bottom">
        <div  v-if="isfolw==true" style="height:100%;padding-top:44px;"> 
            <iframe :src="flowSrc" style="height:100%; width:100%;margin:0;border:0;"> </iframe>
        </div>
    </div>
</template>


<script>
export default {


    data() {
        return {
            flowSrc: null,
  }
    },
  created() {
        this.flowSrc = process.env.DEV_CLOUD_WEB_API + '/dev-vue/areamobile/#/WorkTask/List/todoList';  //直接给flowSrc赋值链接
    },


}
</script>

;

;

;

最后

上面内容就是关于在前端开发中iframe的使用,较为详细的介绍了关于iframe的使用步骤,方便开发者查阅使用,其他内容就不再赘述。

vue嵌套iframe问题总结

router.go()

主要是更改iframe中src值后导致的路由跳转混乱,多次更改iframe的src属性后,调用router.go(-1),不能实现路由后退上一级,二十将iframe当作一个窗口文档,调用了该窗口文档的window.history.go(-1),并未更改父级项目的路由后退功能,

解决办理

不通过改变iframe -> src属性值区访问具体内容,采用window.location.replace(url)更改iframe将访问的内容,具体代码如下

### Vue使用 iframe 嵌入 HTML 页面 在 Vue 项目中嵌入 HTML 页面可以通过 `<iframe>` 标签实现。为了更好地管理和控制 iframe 的行为,可以利用 Vue 组件化的优势来封装 iframe。 #### 创建一个简单的 iframe 组件 创建一个新的组件 `IframeComponent.vue`: ```vue <template> <div class="iframe-container"> <iframe :src="url" frameborder="0"></iframe> </div> </template> <script> export default { props: ['url'], }; </script> <style scoped> .iframe-container { width: 100%; height: 600px; } iframe { width: 100%; height: 100%; } </style> ``` 这个组件接收一个 URL 属性并将其设置为 iframe 的源地址[^1]。 #### 在父组件中使用 IframeComponent 假设有一个名为 `ParentComponent.vue` 的父组件,在其中引入并注册 `IframeComponent`: ```vue <template> <div> <button @click="loadPage">加载页面</button> <IframeComponent v-if="showIframe" :url="pageUrl"/> </div> </template> <script> import IframeComponent from './components/IframeComponent'; export default { components: { IframeComponent }, data() { return { showIframe: false, pageUrl: '' }; }, methods: { loadPage() { this.pageUrl = 'https://example.com'; this.showIframe = true; } } }; </script> ``` 这里定义了一个按钮用于触发 iframe 加载指定的 URL 地址,并通过条件渲染的方式显示/隐藏 iframe[^3]。 #### 跨域通信与交互 当涉及到跨域场景下父子页面之间的调用时,则需遵循浏览器的安全策略——同源政策(SOP),即只有协议、域名和端口都相同的情况下才允许直接访问对方的内容窗口对象(window);对于不同源的情况则可通过 postMessage API 实现安全的数据交换[^2]。 例如,在子页面内发送消息给父级 Vue 应用程序: ```javascript // 子页面中的 JavaScript 代码 window.parent.postMessage('来自 iFrame 的问候', '*'); ``` 而在父页面监听这些消息: ```javascript mounted() { window.addEventListener('message', function(event) { console.log(`收到的消息:${event.data}`); }); }, beforeDestroy() { window.removeEventListener('message', /* ... */); } ``` 这样就可以实现在不同的上下文中互相传递数据而不违反安全性原则。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值