多标签页之间的通信
解决方案有两种思路:浏览器端解决方案、服务器端解决方案。
一、浏览器端解决方案:
思路:本地数据存储
<!-- index01.html -->
<input id="name">
<input type="button" id="btn" value="提交">
1. localStorage
原理:localStorage 在所有同源 url 中都是共享的(localStorage 存储在客户端硬盘,两个页面位于不同浏览器也可以共享)。
注意:在不同的页面修改 localStorage,才能够被监听到,相同页面、重复设置相同的值,都是无法被监听的。
用法:
// index01.html
btn.addEventListener('onclick', function () {localStorage.setItem("key", value);
});
// index02.html
window.addEventListener("storage", function (e) {console.log(e);
});
2. Cookie
原理:同源可访问。
注意:cookie 无法监听变化,需要通过一个定时器,每隔一段时间获取一次数据。
用法:
// index01.html
document.cookie = "key=" + value;
// index02.html
function getCookie(key) {// 从cookie中获取并解析数据return JSON.parse("{\"" + document.cookie.replace(/;\s+/gim,"\",\"").replace(/=/gim, "\":\"") + "\"}")[key];
}
setInterval(function(){ console.log("key=" + getCookie("key"));
}, 5000);
二、服务器端解决方案:
1. websocket(H5新增的协议)
原理:websocket建立的是全双工通讯,服务器也可以主送发送数据给客户端。只要让服务器作为中转站,就可以实现两个页面的通讯。
// index01.html 与服务器建立 全双工 通讯(index02.html同理)
const socket = new WebSocket('ws://localhost:8080'); // 与服务器建立全双工连接// 连接建立时触发
socket.addEventListener('open', function (event) {socket.send('Hello Server!'); // 发送数据给服务器
});// 客户端接收服务端数据时触发
socket.addEventListener('message', function (event) {console.log('Message from server ', event.data); // 监听服务器传回的数据
});socket.send(); // 发送数据
2. SharedWorker(H5新特性)
首先新建一个worker.js,不必打包到项目中,直接放到服务器即可:
let data = '';
let onconnect = function (e) {let port = e.ports[0];port.onmessage = function (e) {if (e.data === 'getData') {port.postMessage(data)} else {data = e.data}}
}
index01.js、index02.js:
const worker = new SharedWorker('worker.js');// 与worker建立连接
worker.port.start();worker.port.addEventListener('message', function (e) {console.log('worker发来的数据:', e.data);
}, false);setBtn.addEventListener('click', function (e) {worker.port.postMessage(value);
}, false);getBtn.addEventListener('click', function (e) {// 获取发送到worker的数据(约定 'getData' 是获取数据)。worker.port.postMessage('getData');
}, false);
相关文章:
多标签页之间的通信
解决方案有两种思路:浏览器端解决方案、服务器端解决方案。 一、浏览器端解决方案: 思路:本地数据存储 <!-- index01.html --> <input id"name"> <input type"button" id"btn" value"…...
CI/CD -gitlab
目录 一、常用命令 二、部署 一、常用命令 官网:https://about.gitlab.com/install/ gitlab-ctl start # 启动所有 gitlab 组件 gitlab-ctl stop # 停止所有 gitlab 组件 gitlab-ctl restart # 重启所有 gitlab 组件 gitlab-ctl statu…...
AR眼镜_单目光波导VS双目光波导方案
双目光波导AR眼镜方案是一种创新的智能设备,可以在现实场景中叠加虚拟信息,提供增强的视觉体验和交互体验。光学显示方案是AR眼镜的核心技术之一,它对眼镜的性能和使用体验起着决定性的作用。 相比于单目AR眼镜,双目AR眼镜具有更好…...
golang 动态库 (buildmode)
目录 1. golang 动态库2. Golang 生成 C 动态库 .so 和静态库 .a2.1. 源代码2.2. 编译2.3. C2.4. 执行2.5. 如何生成静态库2.6. Go 调用 C 库2.6.1. 源代码 3. golang 语言使用动态库、调用动态链接库3.1. Go 插件系统3.2. 动态加载的优劣3.3. Go 的插件系统: Plugin3.4. 插件开…...
【mysql】2006 - Server has gone away
执行了一组插入语句 提示:2006 - Server has gone away; 2006-服务器已经消失; 消失去哪里了,被黑洞吞没了吗?!!! 网络问题 网络不稳定?断网了?检查网络连…...
动态规划43(Leetcode91解码方法)
代码: class Solution {public int numDecodings(String s) {int n s.length();if(s.charAt(0)0)return 0;if(n1)return 1;int[] dp new int[n1];dp[0]1;dp[1]1;for(int i2;i<n;i){if(s.charAt(i-2)1){dp[i]dp[i-2];}else if(s.charAt(i-2)2&&s.charA…...
STM32电源名词解析
先来简单了解一下各种电源端口的命名 VCC:Ccircuit 表示电路的意思, 即接入电路的电压 VDD:Ddevice 表示器件的意思, 即器件内部的工作电压。 VSS:Sseries 表示公共连接的意思,通常指电路公共接地端电压。 GND:在电…...
openAI宫斗感想 chatGPT带给客户巨大利益的就是王者。王者终究会归来。技术人员不要总是想掌握所有核心技术并用到极致。
1.我很喜欢乔布斯用的iCEO,每个人的工作都是临时的,打掉铁饭碗才会有效率。有铁饭碗就容易使人怠慢、傲慢、嚣张、低效率的消耗自己和别人的生命。日本人为什么对每个人每个客户都毕恭毕敬,感觉因为他的饭碗都掌握在周围的人手里。 日本文化…...
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
参考:https://www.cnblogs.com/sam-snow-v/p/15917898.html eclipse链接SQL Server出现问题 笔者使用Open JDK 17,SQL Server 2016,项目中使用JPA操作数据库。测试环境没问题,生产环境出现如题所示“驱动程序无法通过使用安全套接…...
性能调优第一步:服务器硬件如何选型
硬件选型是调优的第一步,无论你是自行购买服务器进行托管,还是租用服务器,或者购买云主机,都要面临的一个问题,那就是选择服务器的硬件配置,因为没有一台服务器能满足所有需求,解决所有的问题。…...
Codewhisperer 使用评价
最近亚⻢逊推出了一款基于机器学习的 AI 编程助手 Amazon CodeWhisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。Amazon CodeWhisperer 与GitHub Copilot类似,主要的功能有: 代码补全注释和文档补全代码…...
结合scss实现黑白主题切换
是看了袁老师的视频后,自己做了一下练习。原视频地址: b站地址https://www.bilibili.com/video/BV15z4y1N7jB/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourcec6cf63302f28d94ebc02cbedcecc57ea首先创建一个全局的scs…...
go-zero对数据库的操作
一、go-zerro中结合gorm来操作mysql数据库 1、这里我这就直接结合gorm-gen的方式来实现数据库操作,关于gorm-gen可以参考官网 2、创建一个数据库,并且创建一个表 -- ------------------------ -- 用户表 -- ------------------------ DROP TABLE IF EXISTS user; C…...
Mac git查看分支以及切换分支
查看本地分支 git branch 查看远程仓库分支 git branch -r 查看本地与远程仓库分支 git branch -a 切换分支 git checkout origin/dev/js...
Qt调起Mac“系统设置”面板
mac系统设置相关字段: Accessibility 面板相关 项目 URL Scheme Main x-apple.systempreferences:com.apple.preference.universalaccess Display x-apple.systempreferences:com.apple.preference.universalaccess?Seeing_Display Zoom x-apple.systempreference…...
小程序如何刷新当前页面
小程序可以通过调用wx.pageScrollTo()方法来实现刷新当前页面,该方法可以滚动页面并使页面滚动到顶部,从而达到刷新页面的效果。具体的操作步骤如下: 在需要刷新的页面中添加一个按钮或其他触发事件的元素。 绑定相应的点击事件,…...
OSI参考模型
目录 一. OSI参考模型的各层功能二. 网络排错三. 网络安全四. 实体、协议、服务和服务访问点SAP五. TCP IP体系结构 一. OSI参考模型的各层功能 \quad \quad \quad \quad 我们首先来看应用层实现的功能 每个字段的各种取值所代表的意思 \quad \quad 比如要保存的文件内容是ab…...
(c语言进阶)内存函数
一.memcpy(void* dest,void* src,int num) ,操作单位为字节,完成复制且粘贴字符串 1.应用 #include <stdio.h> #include<string.h> int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] { 0 };memcpy(arr2, arr1, 20);//从…...
【2023春李宏毅机器学习】快速了解机器学习基本原理
文章目录 机器学习约等于机器自动找一个函数 机器学习分类 regression:输出为连续值classification:输出为一个类别structured learning:又叫生成式学习generative learning 生成有结构的物件(如:影像、句子…...
人工智能:科技的魔术师
引言: 人工智能(Artificial Intelligence,简称AI)作为一项前沿技术,正以惊人的速度改变着我们的生活。它像魔术师一样,能够解决我们的问题、提供建议,甚至预测未来。从智能手机到智能家居&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
