首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从web获得权限?

如何从web获得权限?
EN

Stack Overflow用户
提问于 2020-12-13 00:32:43
回答 2查看 2.2K关注 0票数 1

我试图让Web通过Web NFC API工作,但我无法通过NotAllowedError: NFC permission request denied.的错误消息

我在Windows 10计算机上的Chrome89Dev上使用这个程序,源代码正在本地运行。

我也尝试过在互联网上发布的例子,包括Google样本,但它返回相同的错误。在这里,我并不担心它是实验性的,因为引用确实表明它已经成功地通过了必要的测试,包括权限。

我正在使用的HTML/JS代码如下所示,我已经阅读了规格点9.3,但是我无法理解将它写成代码,那么这里是否有一个指导算法可以帮助解决这个问题呢?

代码语言:javascript
复制
async function readTag() {
  if ("NDEFReader" in window) {
    const reader = new NDEFReader();
    try {
      await reader.scan();
      reader.onreading = event => {
        const decoder = new TextDecoder();
        for (const record of event.message.records) {
          consoleLog("Record type:  " + record.recordType);
          consoleLog("MIME type:    " + record.mediaType);
          consoleLog("=== data ===\n" + decoder.decode(record.data));
        }
      }
    } catch(error) {
      consoleLog(error);
    }
  } else {
    consoleLog("Web NFC is not supported.");
  }
}

async function writeTag() {
  if ("NDEFWriter" in window) {
    const writer = new NDEFWriter();
    try {
      await writer.write("helloworld");
      consoleLog("NDEF message written!");
    } catch(error) {
      consoleLog(error);
    }
  } else {
    consoleLog("Web NFC is not supported.");
  }
}

function consoleLog(data) {
  var logElement = document.getElementById('log');
  logElement.innerHTML += data + '\n';
};
代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<script src="webnfc.js"></script>
</head>
<body>

<p>
  <button onclick="readTag()">Test NFC Read</button>
  <button onclick="writeTag()">Test NFC Write</button>
</p>
<pre id="log"></pre>

</body>
</html>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-13 00:58:41

来自https://web.dev/nfc/#security-and-permissions

Web仅适用于顶级框架和安全浏览上下文(仅限HTTPS)。源必须在处理用户手势时首先请求"nfc“权限(例如按钮单击)。如果之前未授予访问权限,则NDEFReader扫描()和write()方法将触发用户提示。

我想您是从file:// URL运行的,正如您所说的“本地”不支持的那样。

您需要使用https:// URL从本地web服务器托管它。

一旦进入正确的范围,尝试扫描或写入应该会触发用户提示。

还可以检查权限(请参阅https://web.dev/nfc/#check-for-permission )。

更新:

所以我尝试了示例页面https://googlechrome.github.io/samples/web-nfc/

这对我来说适用于Android Chrome 87,并启用了“试验性Web平台功能”

当你按下扫描按钮时,会弹出一个请求许可的对话框。

将此示例中的代码与您的代码进行比较,我注意到:-

代码语言:javascript
复制
ndef.addEventListener("reading" , ({ message, serialNumber }) => { ...

如你所做的:-

代码语言:javascript
复制
ndef.onreading = event => { ...

我不知道这是什么风格设置发生在事件或其他什么(嘿,这都是实验性的)

Update2从桌面支持的评论中回答这个问题。

所以你现在应该是一些桌面/浏览器的组合,将来可能会有更广泛的支持,因为这不再是实验性的标准。显然,正如您的测试链接所示,Linux上的Chrome应该能正常工作,因为这与Android的支持非常相似,所有的NFC设备处理都是由libnfc完成的,浏览器只需要了解这个库,而不是每种类型的usb或其他设备,而不是NFC。

从Windows上所看到的NFC支持来看,大部分关注的焦点是通过USB直接控制NFC读取器,将其作为另一种USB设备,而在Windows.Networking.Proximity API中也有类似的libnfc,我没有遇到任何NFC读取器说他们支持这个阅读器或任何使用它的人。

对于Mac来说,考虑到苹果在iOS支持NFC方面落后,我觉得他们的桌面支持会落后得更远,尽管它可能类似于Linux。

票数 3
EN

Stack Overflow用户

发布于 2020-12-15 11:27:20

正如您可以在https://web.dev/nfc/#browser-support上看到的那样,Web目前只支持Android,这就是为什么在"NotAllowedError: NFC permission request denied."上出现错误的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65271299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档