iframe 实现跨域,两页面之间的通信

news2024/12/22 15:24:13

一、 背景

一个项目为vue2,一个项目为vue3,两个不同的项目实现iframe嵌入,并实现通信

二、方案

iframe跨域时,iframe组件之间常用的通信,主要是H5的possmessage方法

三、案例代码

父页面-vue2(端口号为127.0.0.1:8080)

<template>
  <div>
    <div class="container">
      <iframe
        ref="iframeId"
        id="iframeId"
        src="http://127.0.0.1:8081"
        frameborder="0"
        border="0"
        hspace="0"
        vspace="0"
        scrolling="yes"
        height="100%"
        width="100%"
      ></iframe>
    </div>
  </div>
</template>
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';

@Component({
  components: {},
})
export default class FeatureService extends Vue {
  // 定义一个方法,用于发送消息到iframe
  private postMessageToIframe() {
    // 设置延时,确保iframe已经加载完成
    setTimeout(() => {
      // 定义要发送的数据
      const iframeInfo = { isIframeParent: true };
      // 定义目标源
      const targetOrigin = 'http://127.0.0.1:8081';
      // 获取iframe引用
      const iframe = this.$refs.iframeId;
      // 向iframe发送消息
      iframe.contentWindow.postMessage(
        JSON.stringify(iframeInfo),
        targetOrigin
      );
    }, 500);
  }

  private mounted() {
    // 在组件挂载后,发送消息到iframe
    this.postMessageToIframe();

    window.addEventListener('message', this.handleMessage, false);
  }

  private handleMessage(event: MessageEvent) {
    // 通过origin对消息进行过滤,避免遭到XSS攻击
    if (event.origin === 'http://127.0.0.1:8081') {
      console.log('子页面传输过来参数', event.data);
    }
  }
}
</script>
<style lang="less" scoped>
.container {
  width: 100%;
  margin-top: -40px;
  height: 100vh;
  overflow: hidden;
  #iframeId {
    width: 100%;
    display: block;
  }
}
</style>

子页面-vue3, (端口号为127.0.0.1:8081)

<template>
  <div>
    <!-- 顶部导航 -->
    <TopMenu v-if="!iframeParentInfo.isIframeParent" />

    <div class="demo-sidebar-container demo-full-width">
      <!-- 侧边栏 -->
      <SiderBar v-if="!iframeParentInfo.isIframeParent" />
      <!-- 内容容器 -->
      <ContentBox />
    </div>
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue'

const iframeParentInfo = ref({})

const messageHandler = (e) => {
  // 通过origin对消息进行过滤,避免遭到XSS攻击
  if (e.origin !== 'http://127.0.0.1:8080') return
  if (typeof e.data === 'string') {
    parseData(e.data)
  }
}

const parseData = (data) => {
  try {
    iframeParentInfo.value = JSON.parse(data)
    console.log('父页面传输过来参数', data)
  } catch (error) {
    console.error('解析JSON出错', error)
    iframeParentInfo.value = {}
  }
}

onMounted(() => {
  // 获取 父向 子(iframe) 传递的信息
  window.addEventListener('message', messageHandler)

  // 子(iframe)向父传递信息
  window.parent.postMessage('Hello Parent!', '*')
})
</script>

四、案例效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日常开发小汇总(5)元素跟随鼠标移动(在视口下移动)

<div class"mark"><h1>title</h1><div><p>title 鼠标移动 盒子整体移动</p><p>test</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Modi, porro.</p></div></div>cons…

微信商城小程序开发

微信小程序商城制作流程详解 微信小程序商城的出现为商家提供了一个全新的线上销售平台&#xff0c;让商家能够在微信生态系统中直接向用户展示和销售自己的产品。本文将详细介绍微信小程序商城的制作流程&#xff0c;帮助商家和开发者更好地理解和掌握这一新兴技术。 一、注…

python+chdb 向量检索,百万数据秒级查询

随机生成向量数据集 import numpy as np import pandas as pddata_vectors [(i, np.random.random(300)) for i in range(1000000)] df pd.DataFrame(data_vectors) df.columns [idx, vector] df转化成parquet格式&#xff0c;分批转化&#xff0c;一次会爆炸 import pyar…

yolov5添加ECA注意力机制

ECA注意力机制简介 论文题目&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址&#xff1a;here 基本原理 &#x1f438; ECANet的核心思想是提出了一种不降维的局部跨通道交互策略&#xff0c;有效避免了降维对于通道注意…

HbuilderX uniapp项目转cli项目全过程记录

1、按照官网步骤准备环境 (1) 全局安装 vue-cli npm install -g vue/cli (2) 创建uni-app 使用正式版&#xff08;对应HBuilderX最新正式版 vue create -p dcloudio/uni-preset-vue my-project 使用alpha版&#xff08;对应HBuilderX最新alpha版 vue create -p dcloudio/un…

jar包依赖冲突排查思路和解决方法,以及类加载机制排查(系统原因也导致预发布环境和本地环境的差异)

冲突提示信息 「java.lang.ClassNotFoundException」&#xff1a;类型转换错误&#xff0c;本应该引入的是 logback 包的类&#xff0c;但是实际引入的是 slf4j 下的同名类&#xff0c;导致类型转换错误。 「java.lang.NoSuchMethodError」&#xff1a;找不到特定方法&#x…

【css】linear-gradient()的用法

linear-gradient() CSS函数创建一个由两种或多种颜色沿一条直线进行线性过渡的图像,其结果是<gradient>数据类型的对象,此对象是一种特殊的<image> 数据类型。 语法 /* 渐变轴为 45 度&#xff0c;从蓝色渐变到红色 */ linear-gradient(45deg, blue, red);/* 从右…

Transformer-2. 注意力分数

上一节记录了注意力机制的基础&#xff0c;这一节主要做几个实现&#xff0c;沐神说qkv在不同任务中的角色不一&#xff0c;所以后续内容才会搞懂qkv是啥玩意。 上节使用了高斯核来对查询和键之间的关系建模。 高斯核指数部分可以视为注意力评分函数&#xff08;attention sco…

C高级shell脚本

#!/bin/bash function fun() {sum0i0b($*)while [ $i -lt ${#b[*]} ]do((sum ${b[i]}))((i))doneecho $sum }read -p "请输入数组" -a a fun ${a[*]}function fun2() {aid -ubid -gecho $a $b } p(fun2) uid${p[0]} pid${p[1]} echo $uid $pidXMind

项目上线部署--》网站运行机制

网站运行机制 &#x1f31f;名词解释 域名 DNS 服务器 服务器 &#x1f31f; 网站请求流程 静态页面 动态页面 前后端分离的页面 前后端不分离的页面 &#x1f31f;写在最后 &#x1f31f;名词解释 域名 www.baidu.comwww.taobao.comwww.qq.com 域名俗称网址&#xf…

远程恋爱网站部署秘籍——群晖虚拟机助ni秀恩爱

文章目录 前言1. 安装网页运行环境1.1 安装php1.2 安装webstation 2. 下载网页源码文件2.1 访问网站地址并下载压缩包2.2 解压并上传至群辉NAS 3. 配置webstation3.1 配置网页服务3.2 配置网络门户 4. 局域网访问静态网页配置成功5. 使用cpolar发布静态网页&#xff0c;实现公网…

基于Python和mysql开发的看图猜成语微信小程序(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的看图猜成语微信小程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

C高级 第四天

#!/bin/bash#1.实现一个对数组求和的函数,数组通过实参传递给函数 read -p "输入数组" -a arr sum0 function add() {for i in ${arr[*]}do((sumi))done } add arr echo $sum#2.写一个函数,输出当前用户的uid和gid,并使用变量接收结果 function my_id() {num1id -unu…

Prometheus-PushGateway自定义监控项

文章目录 一、前言二、PushGateway安装三、PushGateway的使用四、PushGateway脚本思路 一、前言 pushgateway相比较exporter是主动向服务器发送请求&#xff0c;pushgateway本身也是一个程序&#xff0c;可以运行在任意节点上(不是必须在被监控端)&#xff0c;运行本身没有抓取…

固态硬盘(Solid State Disk)上的数据丢失了,我们要如何恢复?

文章目录 固态硬盘简介固态硬盘数据恢复立即停止使用SSD从备份恢复数据使用专业数据恢复工具使用数据恢复服务避免DIY尝试 如何避免SSD数据丢失推荐阅读 固态硬盘简介 固态硬盘&#xff08;Solid State Disk或Solid State Drive&#xff0c;简称SSD&#xff09;&#xff0c;是…

Ubuntu使用命令行界面配置静态IP地址

参考地址&#xff1a;https://www.zhihu.com/tardis/sogou/art/46544606 方法一&#xff1a;配置/etc/network/interfaces文件 首先查看网卡接口名称&#xff1a;ip a 知道网卡接口名称之后&#xff0c;在 /etc/network/interfaces 文件中配置&#xff1a; auto enp0s31f6 …

什么是“企业级”无代码?无代码平台应具备哪些功能

一、企业级无代码是什么&#xff1f; 近年来&#xff0c;随着产品成熟度的不断提高&#xff0c;一种针对企业深度业务场景和综合性需求的新的无代码概念——“企业级无代码”应运而生。那么“企业级”无代码是什么呢&#xff1f;为什么说它更好呢&#xff1f;接下来我们就来探讨…

java树结构递归编码(innercode)

1、数据表 如下&#xff1a; 有一个设备类别表&#xff0c;分类具有树结构的层级关系 id为本身id&#xff0c;parent_id为父节点id&#xff0c;type_name 类别名称&#xff0c; type_level 类别层级&#xff0c; type_code 类别编码。 把type_code根据层级编码为innercode的…

二维多孔介质图像的粒度分布研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【量化分析】Python 布林线( Bollinger)概念

一、说明 布林线(BOLL)&#xff0c;Bollinger Bands&#xff0c;利用统计原理&#xff0c;求出股价的标准差及其信赖区间&#xff0c;从而确定股价的波动范围及未来走势&#xff0c;利用波带显示股价的安全高低价位&#xff0c;因而也被称为布林带。 二、布林带基本概念 布林线…