vue内嵌iframe跨域通信的实例代码
目录
- vue内嵌iframe跨域通信
- 1、Vue组件中如何引入iframe?
- 2、vue如何获取iframe对象以及iframe内的window对象?
- 3、vue如何向iframe内传送信息?
- 4、iframe内如何向外部vue发送信息?
vue内嵌iframe跨域通信
1、Vue组件中如何引入iframe?
<template> <div class="act-form"> <iframe :src="src"></iframe> </div> </template> <script> export default { data () { return { src: '你的src' } } } </script>
如上,直接通过添加iframe标签,src属性绑定data中的src,第一步引入就完成了
2、vue如何获取iframe对象以及iframe内的window对象?
在vue中,dom操作比不上jquery的$('#id')来的方便,但是也有办法,就是通过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) } } </script>
然后就是获取iframe的window对象,因为只有拿到这个对象才能向iframe中传东西
<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,具体关于postMessage是什么,自己去google, 我的理解postMessage是有点类似于UDP协议,就像短信,是异步的,你发信息过去,但是没有返回值的,只能内部处理完成以后再通过postMessage向外部发送一个消息,外部监听message 为了让postMessage像TCP,为了体验像同步的和实现多通信互不干扰,特别制定的message结构如下
{ cmd: '命令', params: { '键1': '值1', '键2': '值2' } }
通过cmd来区别这条message的目的
具体代码如下
<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', this.handleMessage) this.iframeWin = this.$refs.iframe.contentWindow }, handleMessage (event) { // 根据上面制定的结构来解析iframe内部发回来的数据 const data = event.data switch (data.cmd) { case 'returnFormJson': // 业务逻辑 break case 'returnHeight': // 业务逻辑 break } } } </script>
4、iframe内如何向外部vue发送信息?
现在通过点击“向iframe发送信息”这个按钮,从外部vue中已经向iframe中发送了一条信息
{ cmd: 'getFormJson', params: {} }
那么iframe内部如何处理这个信息呢?
<!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>
到此这篇关于vue内嵌iframe跨域通信的文章就介绍到这了,更多相关vue内嵌iframe跨域通信内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
赞 (0)