vue内嵌iframe并跨域通信
1、Vue引入iframe: 直接通过添加iframe标签,src属性绑定data中的src。<template><div class="act-form"><iframe :src="src"></iframe></div></template><script>export defa...
·
1、Vue引入iframe: 直接通过添加iframe标签,src属性绑定data中的src。
<template>
<div class="act-form">
<iframe :src="src"></iframe>
</div>
</template>
<script>
export default {
data () {
return {
src: 'src地址'
}
}
}
</script>
2、vue获取iframe对象以及iframe内的window对象: 通过ref获取
<template>
<div class="act-form">
<iframe :src="src" ref="iframe"></iframe>
</div>
</template>
<script>
export default {
data () {
return {
src: 'src地址'
}
},
mounted () {
// iframe的对象
console.log(this.$refs.iframe)
// iframe的window对象
console.log(this.$refs.iframe.contentWindow)
}
}
</script>
3、vue向iframe内传送信息: 通过postMessage
<template>
<div class="act-form">
<iframe :src="src" ref="iframe"></iframe>
<div @click="sendMessage">向iframe发送信息</div>
</div>
</template>
<script>
export default {
data () {
return {
src: 'src地址',
iframeWin: {}
}
},
methods: {
sendMessage () {
// 外部vue向iframe内部传数据
this.iframeWin.postMessage({
cmd: 'getFormJson',
params: {}
}, '*')
}
},
mounted () {
// 在外部vue的window上添加postMessage的监听,并且绑定处理函数handleMessage
window.addEventListener('message', event => {
// 根据上面制定的结构来解析iframe内部发回来的数据
const data = event.data
switch (data.cmd) {
case 'returnFormJson':
// 业务逻辑
break
case 'returnHeight':
// 业务逻辑
break
}
});
this.iframeWin = this.$refs.iframe.contentWindow
}
}
</script>
4、iframe内向外部vue发送信息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>iframe Window</title>
<style>
body {
background-color: #D53C2F;
color: white;
}
</style>
</head>
<body>
<h1>Hello there, i'm an iframe</h1>
<script>
// 向父vue页面发送信息
window.parent.postMessage({
cmd: 'returnHeight',
params: {
success: true,
data: document.body.scrollHeight + 'px'
}
}, '*');
// 接受父页面发来的信息
window.addEventListener("message", function(event){
var data = event.data;
switch (data.cmd) {
case 'getFormJson':
// 处理业务逻辑
break;
}
});
</script>
</body>
</html>
更多推荐
已为社区贡献2条内容
所有评论(0)