iframe内嵌页面——跨域通讯

 
<template>
  <div class="act-form">
    <iframe
      :src="src"
      ref="iframe"
      frameborder="no"
      align="middle"
      width="100%"
      height="600px"
      scrolling="auto" />
    <el-button @click="sendMessage">向iframe发送信息</el-button>
  </div>
</template>
<script>
export default {
  data () {
    return {
      src: ‘‘,
      iframeWin: null,
      isLoaded: false
    }
  },
  created () {
        this.src = ‘http://odp.oa.com‘

  //获取iframe
  var oIframe=document.getElementsByTagName(‘iframe‘)[0];

  //获取iframe中的元素
  var oText=oIframe.contentWindow.document.getElementById(‘navContent‘);

  //改变iframe中元素的属性
  oIframe.contentWindow.document.getElementById(‘navContent‘).style.color=‘red‘;

  },
  mounted () {
    // 在外部vue的window上添加postMessage的监听,并且绑定处理函数handleMessage
    window.addEventListener(‘message‘, this.handleMessage)
    this.iframeWin = this.$refs.iframe.contentWindow
  },
  methods: {
    sendMessage () {
      console.log(this.iframeWin, 1111111)
      this.iframeWin.postMessage({
        cmd: ‘getFormJson‘,
        params: {}
      }, ‘*‘)
    },
    async handleMessage (event) {
      // console.log(event, 222222)
      const data = event.data
      // console.log(data, 333333)
      switch (data.cmd) {
      case ‘returnFormJson‘:
        break
      case ‘returnHeight‘:
        break
      }
    },
    async enroll (data) {
      console.log(‘4444444‘)
    }
  }
}
</script>

  

<!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>

  

原文地址:https://www.cnblogs.com/wheatCatcher/p/11165514.html

时间: 2024-11-05 13:45:20

iframe内嵌页面——跨域通讯的相关文章

Python3.x:获取iframe内嵌页面的源码

Python3.x:获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在iframe里时我们应该先切换到iframe里面. 语法 1.进入iframe iframe = self.driver.find_element_by_xpath("//iframe[contains(@src,'https://************/auth?e_p=1&response_type=

计算机网络之iframe内联框架跨域

iframe框架同源下的数据调用 iframe框架非同源下的数据传输 一.iframe框架同源下的数据调用 1.父窗口向子窗口获取数据 1 //html1父级窗口 2 <iframe src="./2.html"></iframe> 3 <script type="text/javascript"> 4 var oIframe = document.getElementsByTagName('iframe')[0]; 5 oIfr

iframe跨域通讯

工作中遇到一个问题,IFRAME嵌套了一个外部页面用于统计 统计的JS由我们提供,并且需要提供热点图 一开始就碰到的问题就是 不知道页面高度 需要子页面传回页面高度用于将IFRAME拉升到合适高度 当时设想的是由 统计JS 调用父框架进行设置值 但是浏览器直接报错显示安全问题不允许JS跨域执行 我就通过另外一种办法实现了跨域通讯 因为浏览器检查是否跨域是直接对比URL地址的 如果域一致就允许访问 我在统计JS中写入了 <iframe src=父框架执行JS地址" width=0 heigh

[转]内嵌页面iframe以及和其兄弟iframe的相互传值

原文出处 iframe的调用包括以下几个方面:(调用包含html dom,js全局变量,js方法) 主页面调用iframe: iframe页面调用主页面: 主页面的包含的iframe之间相互调用: 主要知识点 1:document.getElementById("ii").contentWindow 得到iframe对象后,就可以通过contentWindow得到iframe包含页面的window对象,然后就可以正常访问页面元素了: 2:$("#ii")[0].co

内嵌页面iframe以及和其兄弟iframe的相互传值

主要知识点 1:document.getElementById("ii").contentWindow 得到iframe对象后,就可以通过contentWindow得到iframe包含页面的window对象,然后就可以正常访问页面元素了: 2:$("#ii")[0].contentWindow  如果用jquery选择器获得iframe,需要加一个[0]: 3:$("#ii")[0].contentWindow.$("#dd"

HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的整理思路,写到博客里还能做个备忘. 1) 跨域通讯 现在做企业项目,前端很不自然的会大量使用iframe标签,我以前在文章里提到iframe是一个效率极其低下的标签,但是如果项目没有什么性能的苛求,使用iframe还是非常的方便的. 使用iframe经常碰到父子窗体通讯的问题,我们看看下面的代码:

html5跨域通讯之postMessage的用法

转自:http://www.cnblogs.com/wshiqtb/p/3171199.html postMessagePortal.html 页面代码 <!DOCTYPE html> <title>标题</title> <link rel="stylesheet" href="styles.css"> <link rel="icon" href="http://apress.com

web端,qq互联以及微信登录接入流程(内嵌页面)总结

前言 实习过程中,我参与了web版相册管家的开发,负责登陆页面的前后端逻辑. 需要在登陆页接入QQ互联和微信扫码登陆,而且是用页面内嵌方式.回头来看其实两者都有文档指导,步骤清楚,并不复杂.但是第一次接触难免踩坑,在此梳理如下,方便今后开发参考. QQ互联 开发文档 https://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B 应用申请 申请appid和ap

HTML框架(frameset框架集和iframe内嵌框架)

HTML框架:1.frameset框架集2.iframe内嵌框架 1.frameset框架集 1.1 创建框架网页的步骤: (1)创建各个子窗口对应的HTML文件 (2)创建整个框架文件,分别引用子窗口文件 1.2 创建框架页面的基本语法:  <frameset cols="25%,50%,*" row="50%,*" border="5">  <frame src="top.html"> ......