我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue内嵌iframe跨域通信的实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue内嵌iframe跨域通信的实例代码

vue内嵌iframe跨域通信

1、Vue组件中如何引入iframe?

<template>
  <div class="act-form">
    <iframe :class="lazy" data-src="class="lazy" data-src"></iframe>
  </div>
</template>
 
<script>
 
export default {
  data () {
    return {
      class="lazy" data-src: '你的class="lazy" data-src'
    }
  }
}
</script>

如上,直接通过添加iframe标签,class="lazy" data-src属性绑定data中的class="lazy" data-src,第一步引入就完成了

2、vue如何获取iframe对象以及iframe内的window对象?

在vue中,dom操作比不上jquery的$('#id')来的方便,但是也有办法,就是通过ref

<template>
  <div class="act-form">
    <iframe :class="lazy" data-src="class="lazy" data-src" ref="iframe"></iframe>
  </div>
</template>
 
<script>
 
export default {
  data () {
    return {
      class="lazy" data-src: '你的class="lazy" data-src'
    }
  },
  mounted () {
    // 这里就拿到了iframe的对象
    console.log(this.$refs.iframe)
  }
}
</script>

然后就是获取iframe的window对象,因为只有拿到这个对象才能向iframe中传东西

<template>
  <div class="act-form">
    <iframe :class="lazy" data-src="class="lazy" data-src" ref="iframe"></iframe>
  </div>
</template>
 
<script>
 
export default {
  data () {
    return {
      class="lazy" data-src: '你的class="lazy" data-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 :class="lazy" data-src="class="lazy" data-src" ref="iframe"></iframe>
    <div @click="sendMessage">向iframe发送信息</div>
  </div>
</template>
 
<script>
 
export default {
  data () {
    return {
      class="lazy" data-src: '你的class="lazy" data-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跨域通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue内嵌iframe跨域通信的实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue内嵌iframe跨域通信的实例代码

这篇文章主要介绍了vue内嵌iframe跨域通信,主要介绍了Vue组件中如何引入iframe,vue如何获取iframe对象以及iframe内的window对象,结合实例代码给大家介绍的非常详细需要的朋友可以参考下
2022-11-13

Vue中iframe结合window.postMessage实现跨域通信

window.postMessage()方法可以安全地实现跨源通信,在一个项目的页面中嵌入另一个项目的页面,需要实现父子,子父页面的通信,对Vue中iframe结合window.postMessage实现跨域通信相关知识感兴趣的朋友跟随小编一起看看吧
2022-12-31

Vue中iframe怎么结合window.postMessage实现跨域通信

这篇文章主要介绍“Vue中iframe怎么结合window.postMessage实现跨域通信”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中iframe怎么结合window.postMess
2023-07-04

Android AIDL实现跨进程通信的示例代码

AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。实现步骤例:用 A程序去访问 B程序的MyService.java服务 在B
2023-05-30

QT5实现UDP通信的示例代码怎么写

QT5实现UDP通信的示例代码怎么写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言该例程经过实际验证可以正常使用,只简单的使用UDP中的单播模式(一对一),
2023-06-22

vue实现浏览器桌面通知的示例代码

本文主要介绍了vue实现浏览器桌面通知的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-08

Android Fragment与Activity之间的相互通信实例代码

Android Fragment与Activity之间的相互通信 前言自从Android3.0引入Fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。Fragmenty不能单独存在,必须依赖Activity作为视图展示的
2022-06-06

websocket结合node.js实现双向通信的示例代码

本文主要介绍了websocket结合node.js实现双向通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-10

android通过okhttpClient下载网页内容的实例代码

有时候我们需要通过自己的缓存机制来缓存网页内容,当没有网的时候显示本地的缓存,当有网的时候取最新的继续缓存到本地。主要机制:通过AsyncTask异步AsyncTask请求,将得到的response.body()缓存起来。主要代码如下://
2023-05-30

编程热搜

目录