上一篇
h5新增api
- 行业动态
- 2025-05-15
- 5
HTML5新增Canvas绘图、本地存储、地理定位、WebSocket、拖放
H5新增API详解(HTML5及后续标准)
HTML5自发布以来,逐步引入了大量新API,极大扩展了前端开发的能力边界,以下从功能分类、核心特性、兼容性及实际应用案例等方面,系统梳理H5新增的核心API。
存储类API
API名称 | 功能描述 | 数据特性 | 兼容性 | 典型场景 |
---|---|---|---|---|
LocalStorage | 本地持久化存储 | 键值对形式,容量约5MB,永久有效 | IE8+/Chrome4+ | 长期保存用户偏好设置 |
SessionStorage | 会话级存储 | 同域同路径下有效,页面关闭即清除 | IE8+/Chrome4+ | 临时表单数据缓存 |
IndexedDB | 结构化数据库 | 支持事务、索引,容量可达数百MB | IE10+/Chrome23+ | 复杂数据持久化(如邮件客户端) |
LocalStorage示例:
// 存储用户主题偏好 localStorage.setItem('theme', 'dark'); // 读取配置 const theme = localStorage.getItem('theme');
实时通信类API
API名称 | 协议类型 | 核心功能 | 兼容性 | 适用场景 |
---|---|---|---|---|
WebSockets | TCP双向协议 | 全双工通信,低延迟 | IE10+/Chrome16+ | 聊天室、股票行情推送 |
Server-Sent Events (SSE) | HTTP单向协议 | 服务器主动推送数据流 | IE10+/Chrome16+ | 日志监控、实时通知 |
WebSockets基础用法:
const ws = new WebSocket('wss://example.com'); ws.onmessage = (event) => console.log(event.data); // 接收消息 ws.send(JSON.stringify({type: 'subscribe', channel: 'news'})); // 发送数据
多媒体处理API
API名称 | 核心能力 | 兼容性 | 典型应用 |
---|---|---|---|
Canvas 2D/WebGL | 图形绘制与动画 | IE9+/Chrome14+ | 游戏开发、数据可视化 |
Audio/Video API | 媒体播放控制 | IE9+/Chrome14+ | 自定义播放器、流媒体处理 |
WebCodecs | 音视频编解码 | Chrome91+/FF89+ | 低延迟媒体处理 |
Canvas绘制渐变矩形:
const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); // 创建线性渐变 const gradient = ctx.createLinearGradient(0, 0, 200, 0); gradient.addColorStop(0, 'red'); gradient.addColorStop(1, 'blue'); ctx.fillStyle = gradient; ctx.fillRect(10, 10, 150, 100); // 绘制矩形
设备交互类API
API名称 | 功能定位 | 数据权限 | 兼容性 | 应用场景 |
---|---|---|---|---|
Geolocation | 地理位置获取 | 需用户授权 | IE9+/Chrome5+ | 地图导航、LBS服务 |
Battery Status | 电池状态监测 | 只读信息 | Chrome56+/FF53+ | 电量预警提示 |
Vibration & Gamepad | 振动控制/外设检测 | Android/iOS差异 | Chrome42+/FF41+ | 游戏反馈、外设适配 |
获取地理位置示例:
navigator.geolocation.getCurrentPosition((position) => { const {latitude, longitude} = position.coords; console.log(`当前位置:${latitude}, ${longitude}`); }, (error) => { console.error(`定位失败:${error.message}`); });
网络状态与PWA相关API
API名称 | 核心作用 | 技术关联 | 兼容性 | 关键价值 |
---|---|---|---|---|
Network Information | 网络状态监测 | PWA离线方案 | Chrome56+/FF53+ | 自动切换离线模式 |
Service Workers | 离线缓存与推送 | PWA核心技术 | Chrome40+/FF44+ | 预缓存资源、消息推送 |
Intersection Observer | 元素可见性检测 | 懒加载优化 | Chrome51+/FF55+ | 图片懒加载、广告追踪 |
Service Workers注册流程:
if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then((registration) => { console.log(`SW注册成功:${registration.scope}`); }).catch((error) => console.error(`SW注册失败:${error}`)); }
支付与安全类API
API名称 | 解决痛点 | 数据安全 | 兼容性 | 应用案例 |
---|---|---|---|---|
Payment Request | 统一支付接口 | PCI合规处理 | Chrome67+/FF67+ | 电商 checkout 流程 |
SubtleCrypto | 客户端加密 | 符合Web Crypto API | Chrome50+/FF53+ | 本地数据加密 |
WebAuthn | 无密码认证 | FIDO2协议支持 | Chrome85+/FF78+ | 多因素身份验证 |
Payment Request调用示例:
const paymentRequest = { methodData: [{ supportedMethods: ['basic-card'], data: { protocolVersion: '2.0', merchantIdentifier: '123456' } }], details: { total: {label: 'Total', amount: {currency: 'USD', value: '10.00'}}, displayItems: [{ label: 'Product', amount: {currency: 'USD', value: '10.00'} }] } }; // 触发支付弹窗 const request = new PaymentRequest(paymentRequest); request.show().then((instrument) => { // 处理支付结果 });
FAQs
Q1:如何检测浏览器是否支持某个H5 API?
A:可通过以下方式检测:
- 布尔型检测:
'serviceWorker' in navigator
- 实例化检测:
try { new WebSocket('wss://test.com') } catch(e) { console.error('WebSocket不支持') }
- 兼容性库:使用
Modernizr
等工具批量检测。
Q2:LocalStorage和IndexedDB如何选择?
A:根据数据特征选择:
- LocalStorage:适合简单键值对存储(如用户设置),容量小且无需复杂操作。
- IndexedDB:适合结构化数据(如对象数组),支持事务和索引查询,适合离线