Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您如何从web nfc API获得权限?_Javascript_Html_Debugging_Nfc_Webnfc - Fatal编程技术网

Javascript 您如何从web nfc API获得权限?

Javascript 您如何从web nfc API获得权限?,javascript,html,debugging,nfc,webnfc,Javascript,Html,Debugging,Nfc,Webnfc,我正试图让Web NFC通过运行,但我无法通过错误消息NotAllowedError:NFC权限请求被拒绝。 我正在Windows10计算机上的Chrome89dev上使用这个,源代码正在本地运行 我也尝试过在互联网上发布的示例,包括,但它返回相同的错误。我不关心它在这一点上是否是实验性的,因为引用确实表明它已经成功地通过了必要的测试,包括权限 下面是我正在使用的HTML/JS代码,我已经阅读了,但是我无法理解如何将其作为代码来编写,所以这里有没有一个指导算法可以帮助解决这个问题 异步函数re

我正试图让Web NFC通过运行,但我无法通过错误消息
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是否正在进行测试?目前还没有。