Web NFC API 浏览器支持
发布于
Web NFC API — Web NFC API 允许网页应用通过 NDEFReader 接口读写 NFC 标签上的 NDEF 消息。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 不支持 | — | 高 | 来源 | 1 |
| Chrome (Android) | 支持 | 89 | 高 | 来源 | — |
| Edge (Desktop) | 不支持 | — | 高 | 来源 | 23 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 4 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 56 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 7 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 89 |
| Samsung Internet | 支持 | 15.0 | 高 | 来源 | 10 |
| WebView (Android) | 支持 | 89 | 高 | 来源 | 11 |
- browser-compat-data 未记录 Chrome 的支持。
- browser-compat-data 未记录 Edge 的支持。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
scan() 必须在安全的、处于活动状态的顶层浏览上下文中调用。扫描开始后,reading
事件会传递每个标签的 NDEF 消息:
async function scanNfcTags(onTag) { const reader = new NDEFReader(); await reader.scan(); reader.onreading = (event) => onTag(event.message, event.serialNumber);}如何在运行时检测
Section titled “如何在运行时检测”在提供该功能之前先检测 NDEFReader 是否存在,并为不支持的情况提供回退:
if ('NDEFReader' in window) { scanButton.hidden = false;} else { scanButton.hidden = true; fallbackNotice.textContent = '此浏览器无法在页面中扫描 NFC 标签。';}- 需要安全上下文——除了
localhost这类被视为可信的来源外,普通 HTTP 源不可用。 scan()必须在活动的顶层浏览上下文中运行;在非活动上下文中调用会导致返回的 Promise 被拒绝,之后失去可见性只会暂停读取而非取消它。- 根据 MDN browser-compat-data,Web NFC 在任何浏览器的桌面端都没有实现,因此桌面端
'NDEFReader' in window为false,需要使用上面的回退路径。 - 支持范围仅限于 Android 上基于 Chromium 的浏览器(Chrome for Android 及沿用其引擎的浏览器,如 Samsung Internet);Firefox 和 Safari 在任何平台上都未实现该 API。
完整参考(权限、write() 与 NDEF 消息格式)见
Web NFC: reading and writing NFC tags from the web.
另见另一个设备访问 API WebHID API。
← 返回兼容性浏览器。