安卓Chrome本地运行Web NFC示例报NDEFReader未定义问题咨询
Web NFC本地运行异常原因及解决方案
核心原因
- 安全上下文限制:Web NFC属于高敏感API,Chrome要求必须在安全上下文中才能调用。安全上下文的判定规则为站点使用HTTPS协议,或访问地址为
localhost本地环回地址。若你本地用HTTP协议+局域网IP(如http://192.168.x.x)访问,不符合安全上下文要求,Chrome会直接禁用Web NFC相关接口。 - Origin Trial白名单机制:针对实验阶段的API,Chrome会提供Origin Trial白名单机制,官方示例所在的域名已加入Web NFC官方白名单,普通用户访问时无需手动开启实验特性flag即可正常调用接口。你的本地访问域名不在白名单范围内,默认无法调用实验阶段的Web NFC接口。
- 接口挂载规则:上述两个条件任意一个不满足时,Chrome不会在全局
window对象上挂载NDEFReader接口,调用时会直接抛出ReferenceError: NDEFReader is not defined错误,页面的可用性检测逻辑也会提示Web NFC不可用。
本地测试解决方案
- 优先使用
http://localhost加端口的形式访问本地页面,localhost默认豁免HTTPS要求,符合安全上下文规则 - 若需要用局域网其他设备访问测试,需要给本地服务配置自签名HTTPS证书,通过HTTPS协议访问页面
- 手动开启实验特性开关:在Chrome地址栏输入
chrome://flags,搜索Experimental Web Platform features,设置为Enabled后重启浏览器即可 - 若需要对外发布给普通用户使用,可到Chrome开发者平台为你的站点域名申请Web NFC对应的Origin Trial令牌,添加到页面的meta标签中,用户无需手动开启flag即可正常使用功能
内容的提问来源于stack exchange,提问作者user1995781
相关产品推荐
相关产品推荐

