跳转到内容

Web NFC API 浏览器支持

发布于

Web NFC API — Web NFC API 允许网页应用通过 NDEFReader 接口读写 NFC 标签上的 NDEF 消息。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
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
  1. browser-compat-data 未记录 Chrome 的支持。
  2. browser-compat-data 未记录 Edge 的支持。
  3. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  4. browser-compat-data 未记录 Firefox 的支持。
  5. browser-compat-data 未记录 Firefox for Android 的支持。
  6. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  7. browser-compat-data 未记录 Safari 的支持。
  8. browser-compat-data 未记录 iOS 版 Safari 的支持。
  9. 由 browser-compat-data 镜像自 Safari 的数据推导。
  10. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  11. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/web-nfc.json · 全球使用占比: 35 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

scan() 必须在安全的、处于活动状态的顶层浏览上下文中调用。扫描开始后,reading 事件会传递每个标签的 NDEF 消息:

async function scanNfcTags(onTag) {
const reader = new NDEFReader();
await reader.scan();
reader.onreading = (event) => onTag(event.message, event.serialNumber);
}

在提供该功能之前先检测 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。

← 返回兼容性浏览器。