iframe vue(vue项目如何内嵌如iframe页面)

本文目录
- vue项目如何内嵌如iframe页面
- vue-router内嵌iframe页面,回退异常
- Vue中iframe保持活动状态(不刷新)
- vue使用iframe只能嵌套一层
- vue中引入iframe,iframe中怎么调取vue methods中的方法
- react项目中利用
- 在vue中使用iframe标签
vue项目如何内嵌如iframe页面
父页面
《iframe :src="url" :style="{width:style.width,height:style.height}" frameborder="0"》《/iframe》 接收传来的页面即子页塌前运面
在vue页面中
created () {
window.addEventListener("message", this.receiveMessageFromIframePage, false);
},
receiveMessageFromIframePage(event){
悔桥 if (event.data && event.data.data && event.data.data.type) {
// do somthing, you want to do
}
}
子页面
postMessage(message,targetOrigin,);
注释:
message:将要发送到其他window的数据。
targetOrigin:指定那些窗口能接收到消息事件,其值可以是字符串 “*” 表示无限制,或者是一个团梁URI。
transfer:是一串和message同时传递的Transferable对象,这些对象的所有权将被转移给消息的接收方,而发送方将不再保留所有权。
postMessage方法被调用时,会在所有页面脚本执行完毕之后像目标窗口派发一个 MessageEvent 消息,该MessageEvent消息有四个属性需要注意:
type:表示该message的类型
data:为 postMessage 的第一个参数
origin:表示调用postMessage方法窗口的源
source:记录调用postMessage方法的窗口对象
vue-router内嵌iframe页面,回退异常
使用vue-router跳转的项目页面中内嵌了一个iframe,如果iframe页面内进行了跳转,用vue-router的返回,是无法回到期望的碧腔vue页面
执行vue-router的返回,回退的只是iframe导航,如果iframe里面点击了多次,使url发生变更,那么用户要点击很多次才能真正的返回。
解决方案:
window指的是当前帧,而parent指的是当前帧的父节点.
因此,在正常情况下使用窗口.在处理iframe时使用parent
如果您没有任何《 iframe》然后去window.history.back()
注:history.length:浏览器历史列表中的元素数销迅量
缺陷:如果悔斗衫你的iframe页面也有回退事件,这种方法可能就不适用(在iframe操作回退,最新的history.length并不会减少)
不要修改 iframe.src,而是删除旧 iframe 元素,新建一个 iframe 元素并替换它,这样不会产生 history。
直接 createElement,替换原来的 iframe。
5.iframe 里面的链接用 location.replace 跳转,这样就只会有一个历史记录了
大家有更好的方案欢迎提出
Vue中iframe保持活动状态(不刷新)
前言:
提起vue的缓存,大家第一时间想到的一定是keep-alive,但是了解keep-alive缓存原理的都知道是将节点信息保留在VNode中的组件中(在内存中),并在需要渲染时从VNode渲染到真实DOM。iframe页面中的内容不属于该节点的信息,因此使用keep-alive仍会重新呈现iframe中的内容。但枣耐困公司很多的项目涉及报表,报表都是以iframe的形式渲染的。
解决思路:
既然keep-alive只对节点信息有缓存,可以考虑在Vue的route-view节点上做点什么吗?切换非iframe页面时,它利用Vue路由;切换iframe页面时,凳念它利用v-show切换显示和隐藏,这样就不会删除iframe节点,从而可以保持iframe状态。
做法:
router下的index.js
引入iframe页面
路由配置
在router-view页面
《div id = "index"》
《Header /》
《keep-alive》
《router-view /》
《/keep-alive》
《!-- iframe page --》
《component
v-for="item in hasOpenComponentsArr"
:key="item.name"
:is="item.name"
亩凯 v-show="$route.path === item.path"
》《/component》
《Footer /》
《/div》
《/template》
《script》
import Header from ’@/views/homePage/homePage_Header’
import Footer from ’@/views/homePage/homePage_Footer’
import Vue from ’vue’
export default {
name: "index",
components : {Header,Footer},
created() {
const routes = this.$router.options.routes;
const componentsArr = this.getComponentsArr(routes);
componentsArr.forEach((item) =》 {
Vue.component(item.name, item.component);
});
this.componentsArr = componentsArr;
this.isOpenIframePage();
},
data() {
return {
iframeArr:,
componentsArr:
}
},
watch: {
$route() {
this.isOpenIframePage();
}
},
computed: {
hasOpenComponentsArr() {
return this.componentsArr.filter(item =》 item.hasOpen);
}
},
methods: {
isOpenIframePage() {
const target = this.componentsArr.find(item =》 {
return item.path === this.$route.path
});
if (target && !target.hasOpen) {
target.hasOpen = true;
}
},
getComponentsArr(routes) {
routes.map( it =》 {
if(it.iframeComponent){
const name = it.name || it.path.replace(’/’, ’’);
this.iframeArr.push({
name: name,
path: it.path,
hasOpen: false,
component: it.iframeComponent
})
}
if(it.children&&it.children.length》0){
this.getComponentsArr(it.children)
}
})
return this.iframeArr
}
}
}
《/script》
《style scoped》
《/style》
结语:
***隐藏网址***
如果大家有好的思路,欢迎交流讨论
vue使用iframe只能嵌套一层
vue使用iframe只能嵌套一层不好。当多次更改iframe-》src属性颂伍后,调用router.go是负一,不能实现路由后退上一级,而是将iframe当作一个窗口文档,调用了该窗口文档的window.history.go负一,并未更改父级项渣弯目的路由如樱闷后退功能。
vue中引入iframe,iframe中怎么调取vue methods中的方法
如果 你的父页面 和子页面 是在一个域下, 也是就是 协议 主机名 端告陪口号是一致的。 可以在子页面 (也就是iframe)中 直接访问 parent 这个对象, 这个对象就是父页面的window 对象。 想要调用父页面methods 中的方法, 就在 父页面vue 中 将该方法 赋值给window 子页面就可以调用了。
mounted() {
window.init = this.init
},
methods : {
init() { console.log(’test’)}
}
// 子页面直接调用
parent.init()
如果子页袜磨蠢面和父页面不在一个域下, 可以使用代理 子页面iframe 使得其在一个域下。
总之,如果你引用的iframe 不在一个域游族下是无法调用的。
react项目中利用
目前公司官网用react写的。东西台多还比较繁重。索性利用iframe标签嵌入vue项目
var data = {’正扒code’: 123}
childFrameObj.contentWindow.postMessage(JSON.stringify(data),vue项目链接);
把想要专递的数据通过childFrameObj.contentWindow.postMessage传过去。必须要以字符串的形式。后面的要传递的链接
然后VUE页面接收 脊冲
在created里面
window.addEventListener(’message’,function(event){
console.log(’解密’,event.data) 获得react传过来的值
},false);
vue页面通过下面的函数吧想要传递的数据给react传回去
var data = {’enter’:’1’}
window.parent.postMessage(JSON.stringify(data), react项目链接);
react项目接收
window.addEventListener(’message’, function(e) {
console.log(’data from domain2 ---》 ’ + e.data);
},false);’
这样就可以完成传递了举野昌
***隐藏网址***
在vue中使用iframe标签
在vue中使扮拿轿用iframe标签时,敏厅打包后的src文件无法查看会报路径不对404等
可以把iframe中的src路径改厅肆成打包后的文件路径即可;

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40








