BlurHash占位图生成器 - 从图片生成模糊预览
上传图片,生成BlurHash字符串和对应的CSS占位图像,用于渐进式加载。
UD5工具箱
生成VAPID密钥对 · 测试推送订阅 · 调试Web Notification
使用 P-256 (prime256v1) 椭圆曲线生成符合规范的 VAPID 密钥对
点击上方按钮生成密钥对...
applicationServerKey,可安全公开
点击上方按钮生成密钥对...
了解Web推送通知的核心概念和最佳实践
VAPID(Voluntary Application Server Identification,自愿应用服务器标识)是Web Push协议中的一种认证机制。它允许推送服务器识别发送推送的应用服务器身份。
使用VAPID的好处:
VAPID使用ECDSA P-256椭圆曲线密钥对,私钥用于签名JWT,公钥用于前端订阅和验证签名。
| 特性 | Web Push API | Notification API |
|---|---|---|
| 触发方式 | 服务器端推送,即使用户未打开网页 | 仅在前端页面打开时调用 |
| 需要Service Worker | ✅ 必需 | ❌ 不需要 |
| 离线通知 | ✅ 支持 | ❌ 不支持 |
| 需要后端 | ✅ 需要推送服务器 | ❌ 纯前端 |
| 用户订阅 | 需要用户主动订阅 | 仅需授予权限 |
| 适用场景 | 实时消息、离线提醒 | 页面内即时反馈 |
生成VAPID密钥的常用方法:
web-push 库的 generateVAPIDKeys() 方法openssl ecparam -genkey -name prime256v1 生成推荐在本地或服务器端生成密钥对,确保私钥不会泄露。本工具所有计算均在浏览器本地完成,不会发送任何数据到服务器。
Service Worker(SW)是Web Push的核心组件,它充当浏览器和推送服务器之间的中间代理:
self.registration.showNotification() 显示系统通知notificationclick 事件处理用户点击PushManager 创建和管理推送订阅SW文件必须是独立的JS文件,与网页同源,且通过HTTPS(或localhost)提供服务。
推送订阅对象包含三个关键字段:
endpoint:推送服务提供商的URL(如FCM、Mozilla Push Service)。服务器向此URL发送请求以触发推送keys.p256dh:客户端生成的P-256公钥(Base64URL编码),用于对推送消息进行端到端加密keys.auth:客户端生成的认证密钥(16字节),用于验证推送消息的真实性,防止重放攻击这三个值必须完整地发送到后端,后端使用它们和VAPID私钥来构造加密的推送请求。缺少任何一个都会导致推送失败。
截至2025年,主流浏览器对Web Push的支持情况:
注意:iOS Safari的支持有特殊要求,网站必须作为PWA添加到主屏幕才能使用推送功能。
当用户拒绝通知权限后,浏览器会阻止再次弹出权限请求。挽回用户的策略:
最佳实践:永远不要在没有上下文的情况下直接请求通知权限,这会导致高拒绝率。
后端发送Web推送的基本步骤(以Node.js为例):
// 1. 安装 web-push 库
// npm install web-push
const webpush = require('web-push');
// 2. 设置VAPID密钥
webpush.setVapidDetails(
'mailto:your@email.com',
vapidPublicKey,
vapidPrivateKey
);
// 3. 发送推送
webpush.sendNotification(subscription, JSON.stringify({
title: '新消息',
body: '您有一条新通知',
icon: '/icon.png'
}));其他语言也有对应的库,如PHP的web-push-php、Python的pywebpush、Go的webpush-go等。
上传图片,生成BlurHash字符串和对应的CSS占位图像,用于渐进式加载。
开启检测后持续记录超过 50ms 的长任务,列出其持续时间和来源,帮助优化 INP。
输入一组数字,分析首位数字分布与本福特定律的吻合程度,用于数据审计。
在执行长计算任务时,通过navigator.scheduling.isInputPending()及时中断以响应用户输入。
随机生成一对背景和文字颜色,并显示其WCAG对比度是否合格。
生成带有严格同步滴答声的闪烁测试视频,用于校正播放设备延迟。
输入或上传(CSV)两组数值数据,自动绘制散点图并显示回归趋势线。
创建一个自定义ReadableStream,像生成器一样逐步推送数据,并用WritableStream消费。
选择青、品、黄、黑等基本颜料,按比例混合,预览油画或水彩的调色结果。
使用DynamicsCompressorNode实时调节音频的动态范围,控制阈值和比率。
组合形容词和动物生成像“愤怒的拉面”一样的滑稽项目版本代号。
粘贴乱码文本,自动检测可能的编码混淆(如UTF-8读GBK),并尝试还原正确文字。
手动触发创建大量对象,监控 performance.memory 的变化,初步判断内存增长趋势。
输入背景和文字颜色,若对比度不达标,自动计算需微调至最近达标色的方案。
上传拍歪的文档照片,自动检测文字方向并旋转摆正,提升OCR准确率。
选择多个本地文件,预览应用查找替换、添加前缀后缀等重命名规则的效果。
输入文本或加载文件,使用Brotli算法压缩,显示压缩前后大小和比率。
录制音频,通过重采样改变播放音高,可调高成卡通音或调低沉。
对图片像素沿特定方向按明亮度排序,生成拉伸条纹的数字艺术效果。
输入所有人名,设定每组人数或组数,随机将名单打乱分入不同队伍,保证公平。
生成风趣赞美句子,可复制发给朋友,增进友谊。
输入网站URL(需可Iframe或截图),套用色盲滤镜预览实际视觉效果。
显示用错误颜色书写的颜色名,用户需按实际含义或墨水色反应,类似Stroop测验。
输入全员名单,指定队数或每队人数,随机均分并显示。
从公开汇率 API 获取最新数据,进行任意两种货币的换算,展示近期趋势图。
选择内置的真实空间脉冲响应(如教堂、大厅),让音频通过Web Audio Convolver节点体验不同混响。
将图片转换为像素艺术风格,可调整像素块大小,生成复古像素效果,纯前端Canvas渲染。
加载图片,显示其最低有效位平面图,辅助发现可能存在的LSB隐写信息。
将图片像素按亮度或色相排序,生成拉伸条状的故障艺术效果。
选择一个渐变样式覆盖在图片上,调整混合模式和不透明度,制作氛围图片。