同源不同页面之间的通信,SharedWorker使用

news2025/2/25 15:49:56

同源不同页面之间的通信,SharedWorker使用

      • 描述
      • 实现
      • 结果

描述

同源不同页面之间的通信,使用SharedWorker,或者使用全局方法通信,这里使用SharedWorker来实现
mdn地址:https://developer.mozilla.org/zh-CN/docs/Web/API/SharedWorker

实现

/**
 * @description 所有连接这个worker的集合
 */
const portsList = []

/**
 * @description 连接成功回调
 */
self.onconnect = (event) => {
    console.log('self', self)
    // 当前触发连接的端口
    const port = event.ports[0]
    // 添加进去
    portsList.push(port)
    // 接收到消息的回调
    port.onmessage = (event) => {
        // 获取传递的消息
        const { message, value } = event.data
        // 计算
        let result = 0
        switch (message) {
            case 'add':
                result = value * 2
                break
            case 'multiply':
                result = value * value
                break
            default:
                result = value
        }
        // 给所有连接的目标发送消息
        portsList.forEach((port) => port.postMessage(`${message}结果是22:${result}`))
    }
}
console.log('self', self)

const sharedWorker = new SharedWorker(new URL('./worker.js', import.meta.url))
console.log('url', new URL('./worker.js', import.meta.url), import.meta.url)
export default sharedWorker

// 为何用这个文件统一new  因为不统一在这里new的话,会因为模块文件不同,导致new的文件不同而不是同一个实例,会不能共享线程
// 用URL来处理文件路径,转换成打包后的正确地址
  1. 为何用这个文件统一new 因为不统一在这里new的话,会因为模块文件不同,导致new的文件不同而不是同一个实例,会不能共享线程
  2. 用URL来处理文件路径,转换成打包后的正确地址
    test1.vue
<template>
    <div>
        <div @click="sendMessage">666</div>
    </div>
</template>
<script>
import hook from './hook.js'
export default {
    mounted() {
        hook.port.start()
        // // 接收SharedWorker返回的结果
        hook.port.onmessage = (event) => {
            console.log(event.data, '666')
        }
    },
    methods: {
    	sendMessage() {
            console.log('hook66', hook)
            hook.port.postMessage({ message: 'add', value: 1 })
        },
    }
}
</script>

text2.vue

<template>
    <div>
        <div @click="sendMessage">777</div>
    </div>
</template>
<script>
import hook from './hook.js'
export default {
    mounted() {
        hook.port.start()
        // // 接收SharedWorker返回的结果
        hook.port.onmessage = (event) => {
            console.log(event.data, '777')
        }
    },
    methods: {
        sendMessage() {
            console.log('hook77', hook)
            hook.port.postMessage({ message: 'multiply', value: 3 })
        },
    }
}
</script>

ceshi.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            iframe {
                width: 300px;
                height: 300px;
            }
        </style>
    </head>
    <body>
        <iframe src="http://localhost:8080/#/s1" frameborder="0"></iframe>
        <iframe src="http://localhost:8080/#/s2" frameborder="0"></iframe>
    </body>
</html>

结果

在这里插入图片描述

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

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

相关文章

【Vue】组件通信2

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 v-model原理 原理&#xff1a; v-model本质是一个语法糖&#xff0c;例如在输入输入框上&#xff0c;就是value属性和input数据的合写&#xff08;注…

数据脱敏(八)静态脱敏

HuggingFists低代码平台提供Mysql,Postgresql,Oracle,ClickHouse等多种数据库连接插件及配套读写算子。提供ftp,sftp,百度盘&#xff0c;阿里云文件系统&#xff0c;腾讯文件系统等多种文件系统连接插件及配套读写算子。满足用户静态脱敏场景下各种数据源要求。 静态脱敏-数据库…

支持云端布署的云LIS系统,云LIS平台,部署一套可支持多家医院检验科共同使用

支持云端布署的云LIS系统源码&#xff0c;云LIS平台源码 基于B/S架构的实验室管理系统&#xff08;云LIS平台&#xff09;&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。 LIS系统通过各种检验设备的网络连接&…

java数据结构与算法刷题-----LeetCode530. 二叉搜索树的最小绝对差

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路&#xff1a;时间复杂度O(n)&#xff0c;空间复杂度O(n) 一个有序…

将文件从windows传入到ubuntu

实现效果图 2.方法&#xff1a; 2.1打开 Ubuntu 的终端窗口&#xff0c;然后执行如下命令来安装 FTP 服务 输入&#xff1a;sudo apt-get install vsftpd 等待软件自动安装&#xff0c;安装完成以后使用如下 VI 命令打开/etc/vsftpd.conf&#xff0c;命令如下&#xff1a;su…

com.mega.car 服务binder 线程形成死锁导致系统anr 卡住

com.mega.car binder 线程卡住&#xff0c;调用到服务的应用发生anr com.mega.car 很多binder 调用被 thread 14 卡住 "Binder:2456_10" prio5 tid40 Blocked | group"main" sCount1 dsCount0 flags1 obj0x136856f0 self0xb4000070b1f910a0 | sysTi…

2024 CKS 题库 | 13、Container安全上下文

不等更新题库 CKS 题库 13、Container安全上下文 Context Container Security Context应在特定namespace中修改Deployment。 Task 按照如下要求修改 sec-ns 命名空间里的 Deployment secdep 用ID为 30000 的用户启动容器&#xff08;设置用户ID为: 30000&#xff09;不允许…

大数据可视化的设计规范,全面剖析,很实用。

大数据可视化的设计规范需要考虑到数据量大、复杂度高、数据类型多样等特点。以下是一份常见的大数据可视化设计规范&#xff0c;供您参考&#xff1a; 设计原则 简单易用&#xff1a;保证用户操作简单、直观&#xff0c;降低用户认知负担。数据准确&#xff1a;保证数据准确…

第 1 章 微信小程序与云开发从入门到实践从零开始做小程序——开发认识微信小程序

小北的参考工具书 小程序开发的图书并不少&#xff0c;这本书仍然值得你拥有&#xff01; 首先&#xff0c;这是一本全栈小程序开发教程&#xff0c;循序渐进&#xff0c;由浅入深&#xff0c;介绍了小程序开发你想了解的方方面面&#xff0c;包括近其小程序开发的各种新技术应…

Mysql常见用法(2)

目录​​​​​​​ mysql 约束 primary key 主键的基本使用 notnull(非空) unique(唯一) foreign key(外键) check 自增长 mysql索引 索引的原理 索引的类型 索引的使用 --添加索引 删除索引&#xff1a; -- 修改索引 &#xff0c; 先删除&#xff0c;在添加新…

算法沉淀——动态规划之子数组、子串系列(上)(leetcode真题剖析)

算法沉淀——动态规划之子数组、子串系列 01.最大子数组和02.环形子数组的最大和03.乘积最大子数组04.乘积为正数的最长子数组长度 01.最大子数组和 题目链接&#xff1a;https://leetcode.cn/problems/maximum-subarray/、 给你一个整数数组 nums &#xff0c;请你找出一个具…

JavaScript异步编程

回调地狱 回调地狱是一种由于过度使用嵌套回调函数而导致的代码结构不清晰、难以理解和维护的问题。一个典型例子是嵌套多个回调函数&#xff0c;每个回调函数都作为另一个回调函数的参数。这样会导致各个部分之间高度耦合、程序结构混乱、流程难以追踪&#xff0c;每个任务只能…

【JavaScript 漫游】【023】Event 对象总结

文章简介 本篇文章为【JavaScript 漫游】专栏的第 022 篇文章&#xff0c;记录了 JavaScript 中 Event 对象的相关知识点。 Event 对象概述 事件发生以后&#xff0c;会产生一个事件对象&#xff0c;作为参数传给监听函数。浏览器原生提供一个 Event 对象&#xff0c;所有的…

设计模式(六)代理模式

相关文章设计模式系列 1.代理模式简介 代理模式介绍 代理模式也叫委托模式&#xff0c;是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多&#xff0c;比如代购、代理上网、打官司等。 定义 为其他对象提供一种代理以控制这个对象的访问。 代理模式…

支付宝小程序智能客服开发文档

语雀参考文档 https://www.yuque.com/em8gt4/qw1tt1/xgz1ol 自定义客服组件&#xff08;仅专业模式支持&#xff09; <contact-button tnt-inst-id"企业编码" scene"聊天窗编码" size"咨询按钮大小" color"咨询按钮颜色" icon&qu…

DBeaver一段时间不使用,就会自动断开连接,需要刷新数据库或者断开重连解决方案 DB2

DBeaver一段时间不使用&#xff0c;就会自动断开连接&#xff0c;需要刷新数据库或者断开重连解决方案 DB2

【Flink】Flink 中的时间和窗口之窗口(Window)

1. 窗口的概念 Flink是一种流式计算引擎&#xff0c;主要是来处理无界数据流&#xff0c;数据流的数据是一直都有的&#xff0c;等待流结束输入数据获取所有的流数据在做聚合计算是不可能的。为了更方便高效的处理无界流&#xff0c;一种方式就是把无限的流数据切割成有限的数…

【hashset】【hash查找元素O(1 )时间复杂度】Leetcode 128. 最长连续序列

【hashset】【hash查找元素O&#xff08;1 &#xff09;时间复杂度】Leetcode 128. 最长连续序列 解法1 hashmap解法2 不满足题设 排序遍历 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 hashmap 核心思想 利用了ha…

Vue3的8大生命周期

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

Vue.js+SpringBoot开发快递管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快递区域模块2.4 快递货架模块2.5 快递档案模块 三、界面展示3.1 登录注册3.2 快递类型3.3 快递区域3.4 快递货架3.5 快递档案3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 …