VUE--使用BroadcastChannel频道实现同源策略不同工程页面通信

本文主要是介绍VUE--使用BroadcastChannel频道实现同源策略不同工程页面通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

在 Vue.js 中,不同工程(通常指的是两个完全独立的 Vue 项目)之间的页面通信是不能直接通过 Vue 的内部机制(如 props、Vuex、Event Bus 等)来实现的,因为这些机制都仅限于单个 Vue 应用内部。但是,你可以通过一些其他方法来实现这种跨应用的通信。

以下是一些可能的解决方案:

1. 使用浏览器存储(如 localStorage、sessionStorage 或 IndexedDB)

两个 Vue应用可以共享浏览器存储来交换数据。一个应用可以将数据写入存储,另一个应用可以读取这些数据。但是,这种方法可能会遇到并发问题(如两个应用同时写入数据),并且不适合处理大量数据或复杂的数据结构。

2. 使用服务器端存储(如数据库)

你可以创建一个后端服务,用于存储和检索数据。两个 Vue 应用都可以通过 API调用与这个后端服务进行通信,从而间接地实现跨应用通信。这种方法更加健壮和灵活,但需要额外的后端开发工作。

3. 使用 WebSockets WebSockets 提供了一种在单个 TCP 连接上进行全双工通信的机制。

你可以创建一个WebSocket 服务器,并让两个 Vue应用都连接到这个服务器。然后,它们就可以通过服务器进行通信了。这种方法适用于实时通信场景,但也需要额外的后端开发工作。

4. 使用 URL 参数或查询字符串

如果你的通信需求比较简单,只是需要在两个页面之间传递一些参数或状态,那么你可以考虑使用 URL参数或查询字符串。当用户从第一个 Vue 应用导航到第二个 Vue 应用时,可以将需要传递的数据附加到 URL中。然后,第二个应用可以从 URL 中读取这些数据。但是,这种方法只适用于简单的数据传递场景,并且可能会受到 URL 长度限制的影响。

5. 使用第三方服务(如 Firebase、PubNub 等)

有些第三方服务提供了实时数据库或消息传递功能,可以用于实现跨应用通信。你可以将这些服务集成到你的 Vue 应用中,并利用它们的功能来实现跨应用通信。但是,这种方法可能会增加你的项目依赖性和复杂性。

6. 使用浏览器扩展或插件

如果你的用户群体允许安装浏览器扩展或插件,你可以考虑使用这种方法来实现跨应用通信。通过扩展或插件,你可以访问更多的浏览器 API和功能,从而更容易地实现跨应用通信。但是,这种方法可能会受到浏览器限制和用户体验问题的影响。

在选择解决方案时,请根据你的具体需求和项目环境进行权衡和选择。

1.在A页面创建发送和接受数据

注:必须同源策略才能使用

<!-- SendAndReceive.vue -->
<template><div><p>Vue App A</p><input v-model="message" placeholder="输入要发送的消息"><button @click="sendMessage">发送</button><p>已收到消息: {{ receivedMessage }}</p></div>
</template><script>
export default {data() {return {message: '',receivedMessage: '',bc: null,};},mounted() {this.bc = new BroadcastChannel('my-channel');this.bc.onmessage = event => {this.receivedMessage = event.data;};},methods: {sendMessage() {if (this.message) {this.bc.postMessage(`Vue App A: ${this.message}`);this.message = ''; // Reset input field}},},beforeDestroy() {if (this.bc) {this.bc.close(); // Close the channel when the component is destroyed}},
};
</script>

2.在B页面创建发送和接受数据

<!-- ReceiveAndSend.vue -->
<template><div><p>Vue App B</p><p>已收到消息: {{ receivedMessage }}</p><input v-model="message" placeholder="输入要发送的消息"><button @click="sendMessage">发送</button></div>
</template><script>
export default {data() {return {message: '',receivedMessage: '',bc: null,};},mounted() {this.bc = new BroadcastChannel('my-channel');this.bc.onmessage = event => {this.receivedMessage = event.data;};},methods: {sendMessage() {if (this.message) {this.bc.postMessage(`Vue App B: ${this.message}`);this.message = ''; // Reset input field}},},beforeDestroy() {if (this.bc) {this.bc.close(); // Close the channel when the component is destroyed}},
};
</script>

这篇关于VUE--使用BroadcastChannel频道实现同源策略不同工程页面通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997798

相关文章

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

gorm乐观锁使用小结

《gorm乐观锁使用小结》本文主要介绍了gorm乐观锁使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言grom乐观锁机制gorm乐观锁依赖安装gorm乐观锁使用创建一个user表插入数据版本号更新总结前言乐观锁,顾名

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD