Javascript 您如何从web nfc API获得权限?
我正试图让Web NFC通过运行,但我无法通过错误消息Javascript 您如何从web nfc API获得权限?,javascript,html,debugging,nfc,webnfc,Javascript,Html,Debugging,Nfc,Webnfc,我正试图让Web NFC通过运行,但我无法通过错误消息NotAllowedError:NFC权限请求被拒绝。 我正在Windows10计算机上的Chrome89dev上使用这个,源代码正在本地运行 我也尝试过在互联网上发布的示例,包括,但它返回相同的错误。我不关心它在这一点上是否是实验性的,因为引用确实表明它已经成功地通过了必要的测试,包括权限 下面是我正在使用的HTML/JS代码,我已经阅读了,但是我无法理解如何将其作为代码来编写,所以这里有没有一个指导算法可以帮助解决这个问题 异步函数re
NotAllowedError:NFC权限请求被拒绝。
我正在Windows10计算机上的Chrome89dev上使用这个,源代码正在本地运行
我也尝试过在互联网上发布的示例,包括,但它返回相同的错误。我不关心它在这一点上是否是实验性的,因为引用确实表明它已经成功地通过了必要的测试,包括权限
下面是我正在使用的HTML/JS代码,我已经阅读了,但是我无法理解如何将其作为代码来编写,所以这里有没有一个指导算法可以帮助解决这个问题
异步函数readTag(){
如果(“窗口中的NDEFReader”){
const reader=new NDEFReader();
试一试{
等待读卡器扫描();
reader.onreading=事件=>{
const decoder=新文本解码器();
for(事件、消息、记录的常量记录){
控制台日志(“记录类型:+Record.recordType”);
consoleLog(“MIME类型:+record.mediaType”);
控制台日志(“===数据===\n”+解码器.decode(记录.data));
}
}
}捕获(错误){
控制台日志(错误);
}
}否则{
consoleLog(“不支持网络NFC”);
}
}
异步函数writeTag(){
如果(“窗口中的NDEFWriter”){
const writer=new NDEFWriter();
试一试{
等待作家。写(“helloworld”);
控制台日志(“NDEF消息已写入!”);
}捕获(错误){
控制台日志(错误);
}
}否则{
consoleLog(“不支持网络NFC”);
}
}
功能控制台日志(数据){
var logElement=document.getElementById('log');
logElement.innerHTML+=data+'\n';
};代码>
测试NFC读取
测试NFC写入
来自
Web NFC仅适用于顶级框架和安全浏览上下文(仅限HTTPS)。在处理用户手势(如点击按钮)时,源站必须首先请求“nfc”许可。如果以前未授予访问权限,NDEFReader scan()和write()方法将触发用户提示
我猜您是从一个文件运行的://
URL,正如您所说的“本地”不受支持。您需要使用
https://
URL从本地web服务器托管它
一旦进入正确的范围,尝试扫描或写入将触发用户提示
您还可以检查权限,请参见
更新:所以我尝试了样本页面 这对我来说在Android Chrome 87上很有效,启用了“实验性Web平台功能” 当您点击扫描按钮时,会弹出一个请求许可的对话框 将此示例中的代码与您的代码进行比较,我注意到:-
ndef.addEventListener("reading" , ({ message, serialNumber }) => { ...
与您的一样:-
ndef.onreading = event => { ...
我不知道这是否是风格设置事件发生的事情或其他事情(嘿,这都是实验性的)
更新2
回答桌面支持评论中的问题
因此,您现在应该是一些桌面/浏览器组合,将来可能会有更广泛的支持,因为这不再是实验性标准。显然,正如您的测试链接所建议的,Linux桌面上的Chrome应该可以工作,因为这与Android支持非常相似,所有NFC设备的处理都是由libnfc
完成的,浏览器只需要知道这个库,而不是每种类型的usb或NFC以外的其他设备
从Windows上的NFC支持来看,这主要集中在通过USB作为另一个USB设备直接控制NFC读卡器上,而在Windows.Networking.approxity
API中有一个libnfc等价物,我没有遇到任何NFC读卡器说他们支持这个或任何人使用它
对于Mac Deskstop,考虑到苹果在iOS中的NFC支持落后于市场,我觉得他们的桌面支持将更加落后,即使它可能类似于Linux。正如你在上所读到的,Web NFC目前只支持Android,这就是为什么你会得到
“NotAllowedError:NFC权限请求被拒绝。”
Windows上的错误。确定,因此我已集成了权限代码并将其托管到(查看页面中的源代码)现在我不确定到底发生了什么,因为我甚至无法让它在控制台中显示任何内容,也无法让它显示用户提示。更新了答案,因为我能够使用其他示例代码。我弄乱了代码,最终让它与您的代码更改一起工作;非常感谢。你认为这些结果可以在桌面浏览器上重复吗?我已经在桌面Chrome支持方面取得了很多成功(例如),但我不确定为什么它没有以同样的方式处理它,即使有一个连接的NFC reader://添加了关于桌面支持的更新,因为测试结果的链接显示,Linux上Chrome的支持应该和Android上的一样好(因为它们实际上是一样的)嘿@andrew我刚才在读你关于libnfc在Linux上工作的最新答案;你似乎对如何在浏览器中链接libnfc有粗略的想法?我让它在终端上独立工作,我正试图找出如何将它整合到web应用程序中,你有什么建议吗?很高兴知道,谢谢Windows支持和API是否正在进行测试?目前还没有。