HTML5的多线程技术:Shared Worker的使用示例

Shared Worker 与普通的 Web Worker 类似,但不同之处在于它可以被多个浏览器窗口、标签页或者iframe共享,使得这些上下文之间能够相互通信。下面是一个使用 Shared Worker 的完整示例。
共享Worker脚本(sharedWorker.js)
self.addEventListener('connect', function(event) {var port = event.ports[0];port.onmessage = function(e) {console.log('Received message:', e.data);if (e.data.type === 'broadcast') {port.postMessage({ type: 'broadcast', data: e.data.message, origin: e.origin });} else if (e.data.type === 'ping') {port.postMessage({ type: 'pong', data: 'Pong from Shared Worker!', origin: e.origin });}};port.start();port.postMessage({ type: 'ready', message: 'Shared Worker is ready!', origin: location.origin });
});
HTML 页面1(page1.html)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Page 1</title>
</head>
<body><h2>Page 1</h2><button onclick="sendPing()">Ping Shared Worker</button><div id="response"></div><script>if (navigator.userAgent.indexOf("Trident") !== -1) {alert("Internet Explorer does not support Shared Workers.");} else {var worker = new SharedWorker('sharedWorker.js');worker.port.start();worker.port.onmessage = function(e) {if (e.data.type === 'ready') {document.getElementById('response').innerText = e.data.message;} else if (e.data.type === 'pong') {document.getElementById('response').innerText = 'Received: ' + e.data.data;} else if (e.data.type === 'broadcast') {document.getElementById('response').innerText += '\nBroadcast from ' + e.data.origin + ': ' + e.data.data;}};function sendPing() {worker.port.postMessage({ type: 'ping', message: 'Ping from Page 1' });}}</script>
</body>
</html>
HTML 页面2(page2.html)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Page 2</title>
</head>
<body><h2>Page 2</h2><button onclick="broadcastMessage()">Broadcast Message</button><div id="response"></div><script>if (navigator.userAgent.indexOf("Trident") !== -1) {alert("Internet Explorer does not support Shared Workers.");} else {var worker = new SharedWorker('sharedWorker.js');worker.port.start();worker.port.onmessage = function(e) {if (e.data.type === 'ready') {document.getElementById('response').innerText = e.data.message;} else if (e.data.type === 'broadcast') {document.getElementById('response').innerText += '\nBroadcast from ' + e.data.origin + ': ' + e.data.data;}};function broadcastMessage() {var message = prompt("Enter a message to broadcast:");if (message) {worker.port.postMessage({ type: 'broadcast', message: message });}}}</script>
</body>
</html>

在这个例子中,sharedWorker.js作为一个Shared Worker,能够接收来自多个页面的消息,并根据消息类型执行不同的操作。page1.html可以向Shared Worker发送ping请求并接收pong响应,同时也能接收其他页面通过Worker广播的消息。page2.html则可以输入消息并广播给所有连接到该Shared Worker的页面。这样,多个页面可以通过Shared Worker实现数据的共享和通信。

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

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

相关文章

isupper()方法——判断字符串是否全由大写字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isupper()方法用于判断字符串中所有的字母是否都是大写。isupper()方法的语法格式如下&#xff1a; str.isupper() 如果字符串中包含至少…

我是如何在bytemd中实现自定义目录的

介绍 接着上文说完&#xff0c;实现了在markdown编辑器中插入视频的能力&#xff0c;接下来还需要继续优化 markdown文档的阅读体验&#xff0c;比如 再加个目录 熟悉markdown语法的朋友可能会说&#xff0c;直接在编辑时添加 toc 标签&#xff0c;可以在文章顶部自动生成目录…

实验三 时序逻辑电路实验

仿真 链接&#xff1a;https://pan.baidu.com/s/1z9KFQANyNF5PvUPPYFQ9Ow 提取码&#xff1a;e3md 一、实验目的 1、通过实验&#xff0c;理解触发的概念&#xff0c;理解JK、D等常见触发器的功能&#xff1b; 2、通过实验&#xff0c;加深集成计数器功能的理解&#xff0c;掌…

⭐Ollama的本地安装⚡

先来逛一下咱们的主角Ollama的官网地址&#xff1a; Ollama 大概长这个样子&#x1f914; 因为本地系统的原因&#xff0c;文章只提供Widows的安装方式&#xff0c;使用Linux和Mac的大佬&#xff0c;可以自行摸索&#x1f9d0; 下载完成后就是安装了&#x1f355;&#xff0c…

一、Redis简介

一、Redis介绍与一般应用 1.1 基本了解 Redis全称Remote Dictionary Server(远程字典服务)&#xff0c; 是一个开源的高性能键值存储系统&#xff0c;通常用作数据库、缓存和消息代理。使用ANSI C语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数…

JVM性能监控与调优:生产环境的实践指南

JVM性能监控与调优&#xff1a;生产环境的实践指南 一、引言 在生产环境中&#xff0c;Java应用程序的性能监控和调优是确保系统稳定运行、提升用户体验的关键环节。JVM&#xff08;Java Virtual Machine&#xff09;作为Java应用程序的运行环境&#xff0c;其性能直接影响到…

Flink 本地任务添加配置参数

Flink 本地任务添加配置参数 配置一个Configuration&#xff0c;然后通过StreamExecutionEnvironment.getExecutionEnvironment(configuration)传入。 例如&#xff1a; Configuration configuration new Configuration();configuration.set(RestartStrategyOptions.RESTART_…

苹果笔记本能玩网页游戏吗 苹果电脑玩steam游戏怎么样 苹果手机可以玩游戏吗 mac电脑安装windows

苹果笔记本有着优雅的机身、强大的性能&#xff0c;每次更新迭代都备受用户青睐。但是&#xff0c;当需要使用苹果笔记本进行游戏时&#xff0c;很多人会有疑问&#xff1a;苹果笔记本能玩网页游戏吗&#xff1f;苹果笔记本适合打游戏吗&#xff1f;本文将讨论这两个话题&#…

6-14题连接 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.6. 使用唯一标识码替换员工ID2.7- 产品销售分析 I2.8 - 进店却未进行过交易的顾客2.9 - 上升的温度2.10 - 每台机器的进程平均运行时间2.11- 员工奖金2.12-学生们参加各科测试的次数2.13-至少有5名直接下属的经理2.14 - 确认率 1. 相关知识点 left …

JavaScript——属性的检测和枚举

目录 任务描述 相关知识 属性的检测 属性的枚举 编程要求 任务描述 本关任务&#xff1a;给定一个属性的名字&#xff0c;请先判断它属于哪一个对象&#xff0c;然后返回该对象的所有自有属性名连接成的字符串。 如&#xff1a;school对象有三个自有属性name,location,s…

达梦数据库系列—15. 表的备份和还原

目录 1、表备份 2、表还原 1、表备份 表备份和表还原恢复&#xff0c;都必须在联机状态下进行。 与备份数据库与表空间不同&#xff0c;不需要备份归档日志&#xff0c;不存在增量备份之说。 CREATE TABLE TAB_FOR_RES_02(C1 INT);CREATE INDEX I_TAB_FOR_RES_02 ON TAB_F…

树状数组——点修区查与区修点查

树状数组是一种代码量小&#xff0c;维护区间的数据结构 他可以实现&#xff1a; 1.区间修改&#xff0c;单点查询 2.单点修改&#xff0c;区间查询 当然&#xff0c;二者不可兼得&#xff0c;大人全都要的话&#xff0c;请选择线段树 前置知识&#xff1a; lowbit(x)操作…

如何安装和配置Monit

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 Monit Monit 是一个有用的程序&#xff0c;可以自动监控和管理服务器程序&#xff0c;以确保它们不仅保持在线&#xff0c;而且文…

Java与前端框架集成开发指南

Java与前端框架集成开发指南 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今互联网应用开发中&#xff0c;Java作为一种强大的后端语言&#xff0…

程序人生 - (002)

作为一名程序员&#xff0c;在编程和软件开发的过程中&#xff0c;通常会有一些深刻的感悟和体会。这些感悟不仅仅是关于技术的&#xff0c;也包括对工作的态度、职业的发展和人生的理解。 代码即逻辑&#xff1a;编写代码不仅仅是使用编程语言&#xff0c;更重要的是用逻辑思维…

LDM论文解读

论文名称&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models 发表时间&#xff1a;CVPR2022 作者及组织&#xff1a;Robin Rombach, Andreas Blattmann, Dominik Lorenz,Patrick Esser和 Bjorn Ommer, 来自Ludwig Maximilian University of Munich &a…

独一无二的设计模式——单例模式(Java实现)

1. 引言 亲爱的读者们&#xff0c;欢迎来到我们的设计模式专题&#xff0c;今天的讲解的设计模式&#xff0c;还是单例模式哦&#xff01;上次讲解的单例模式是基于Python实现&#xff08;独一无二的设计模式——单例模式&#xff08;python实现&#xff09;&#xff09;的&am…

web全屏api,实现元素放大全屏,requestFullscreen,exitFullscreen

全屏api 主要方法 document.exitFullscreen(); 退出页面全屏状态&#xff0c;document是全局文档对象 dom.requestFullscreen(); 使dom进入全屏状态&#xff0c;异步&#xff0c;dom是一个dom元素 dom.onfullscreenchange&#xff08;&#xff09;; 全…

专题四:Spring源码初始化环境与BeanFactory

上文我们通过new ClassPathXmlApplicationContext("applicationContext.xml");这段代码看了下Spring是如何将Xml里面内容注入到Java对象中&#xff0c;并通过context.getBean("jmUser");方式获得了一个对象实例&#xff0c;而避开使用new 来耦合。今天我们…

【TB作品】智能台灯控制器,ATMEGA128单片机,Proteus仿真

题目 8 &#xff1a;智能台灯控制器 基于单片机设计智能台灯控制器&#xff0c;要求可以调节 LED 灯的亮度&#xff0c;实现定时开启与关闭&#xff0c; 根据光照自动开启与关闭功能。 具体要求如下&#xff1a; &#xff08;1&#xff09;通过 PWM 功能调节 LED 灯亮度&#x…