vue2前端监听usb

news2024/9/25 15:28:14

在 Vue2 前端应用中监听 USB 设备的插入和拔出事件,可以使用浏览器提供的 WebUSB API。这需要运行在支持 WebUSB API 的浏览器上,并且用户需要授予相应的权限。

以下是一个示例,展示如何在 Vue2 项目中监听 USB 设备的插入和拔出事件。

1. 设置 Vue2 项目

假设你已经有一个 Vue2 项目,或者你可以通过 vue-cli 创建一个新的 Vue2 项目。

2. 安装 WebUSB 相关库(可选)

虽然可以直接使用原生的 WebUSB API,但使用库可能会简化开发过程。例如,可以安装 usb 库,不过这个库主要用于 Node.js 环境,如果你只在浏览器中使用,可以直接使用 WebUSB API。

npm install usb

3. 在 Vue2 项目中使用 WebUSB API

在你的 Vue 组件中,可以这样编写代码来监听 USB 设备的插入和拔出事件。

<template>
  <div>
    <h1>USB 设备监听示例</h1>
    <p v-if="usbDevice">当前连接的 USB 设备: {{ usbDevice.productName }}</p>
    <p v-else>未检测到 USB 设备</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      usbDevice: null
    };
  },
  mounted() {
    this.listenToUsbEvents();
  },
  methods: {
    listenToUsbEvents() {
      // 监听 USB 设备的连接
      navigator.usb.addEventListener('connect', this.onUsbConnect);

      // 监听 USB 设备的断开连接
      navigator.usb.addEventListener('disconnect', this.onUsbDisconnect);

      // 获取已连接的设备(如果有)
      navigator.usb.getDevices().then(devices => {
        if (devices.length > 0) {
          this.usbDevice = devices[0];
        }
      });
    },
    onUsbConnect(event) {
      console.log('USB 设备已连接:', event.device);
      this.usbDevice = event.device;
    },
    onUsbDisconnect(event) {
      console.log('USB 设备已断开连接:', event.device);
      this.usbDevice = null;
    }
  },
  beforeDestroy() {
    // 清除事件监听器
    navigator.usb.removeEventListener('connect', this.onUsbConnect);
    navigator.usb.removeEventListener('disconnect', this.onUsbDisconnect);
  }
};
</script>

<style scoped>
h1 {
  font-size: 24px;
}
p {
  font-size: 18px;
}
</style>

4. 解释代码

  • 监听连接事件:在 mounted 生命周期钩子中,使用 navigator.usb.addEventListener('connect', this.onUsbConnect) 监听 USB 设备的连接事件。
  • 监听断开事件:同样在 mounted 生命周期钩子中,使用 navigator.usb.addEventListener('disconnect', this.onUsbDisconnect) 监听 USB 设备的断开事件。
  • 获取已连接设备:使用 navigator.usb.getDevices() 获取当前已连接的 USB 设备。
  • 处理连接和断开事件:在 onUsbConnectonUsbDisconnect 方法中,更新组件的状态,显示或隐藏 USB 设备信息。
  • 清除事件监听器:在 beforeDestroy 生命周期钩子中,清除事件监听器,以避免内存泄漏。

注意事项

  1. 浏览器支持:确保你使用的浏览器支持 WebUSB API(如 Chrome)。
  2. 用户权限:用户需要授予访问 USB 设备的权限。
  3. 设备兼容性:并不是所有 USB 设备都兼容 WebUSB API。

通过这种方式,你可以在 Vue2 应用中监听 USB 设备的插入和拔出事件,并根据需要进行处理。

在浏览器中使用 WebUSB API 时,用户权限是通过用户手动授予的。浏览器会弹出一个对话框,要求用户允许访问特定的 USB 设备。你无法通过代码自动授予权限,但可以引导用户通过交互方式授予权限。

以下是一个示例,展示如何引导用户选择 USB 设备并授予权限:

1. 在 Vue2 组件中引导用户授予权限

你可以在 Vue2 组件中添加一个按钮,点击按钮后请求用户授予访问 USB 设备的权限。

<template>
  <div>
    <h1>USB 设备监听示例</h1>
    <p v-if="usbDevice">当前连接的 USB 设备: {{ usbDevice.productName }}</p>
    <p v-else>未检测到 USB 设备</p>
    <button @click="requestUsbDevice">连接 USB 设备</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      usbDevice: null
    };
  },
  mounted() {
    this.listenToUsbEvents();
  },
  methods: {
    listenToUsbEvents() {
      // 监听 USB 设备的连接
      navigator.usb.addEventListener('connect', this.onUsbConnect);

      // 监听 USB 设备的断开连接
      navigator.usb.addEventListener('disconnect', this.onUsbDisconnect);

      // 获取已连接的设备(如果有)
      navigator.usb.getDevices().then(devices => {
        if (devices.length > 0) {
          this.usbDevice = devices[0];
        }
      });
    },
    requestUsbDevice() {
      // 请求用户选择 USB 设备并授予权限
      navigator.usb.requestDevice({ filters: [{ vendorId: 0x2341 }] }) // 根据需要设置过滤条件
        .then(device => {
          this.usbDevice = device;
          console.log('已选择 USB 设备:', device);
        })
        .catch(error => {
          console.error('用户未授予 USB 设备权限:', error);
        });
    },
    onUsbConnect(event) {
      console.log('USB 设备已连接:', event.device);
      this.usbDevice = event.device;
    },
    onUsbDisconnect(event) {
      console.log('USB 设备已断开连接:', event.device);
      this.usbDevice = null;
    }
  },
  beforeDestroy() {
    // 清除事件监听器
    navigator.usb.removeEventListener('connect', this.onUsbConnect);
    navigator.usb.removeEventListener('disconnect', this.onUsbDisconnect);
  }
};
</script>

<style scoped>
h1 {
  font-size: 24px;
}
p {
  font-size: 18px;
}
button {
  font-size: 16px;
  padding: 10px;
  margin-top: 20px;
}
</style>

2. 解释代码

  • requestUsbDevice 方法:当用户点击按钮时,这个方法会调用 navigator.usb.requestDevice,打开一个对话框,要求用户选择一个 USB 设备并授予权限。你可以使用 filters 参数来限制用户可以选择的设备类型。
  • listenToUsbEvents 方法:设置事件监听器,以便在 USB 设备连接或断开时进行处理。
  • onUsbConnectonUsbDisconnect 方法:更新组件状态以反映设备连接状态。
  • mounted 生命周期钩子:在组件挂载时设置事件监听器,并检查是否有已连接的设备。
  • beforeDestroy 生命周期钩子:在组件销毁前清除事件监听器,以避免内存泄漏。

3. 过滤条件

navigator.usb.requestDevice 中,你可以使用 filters 参数来限制用户可以选择的 USB 设备。这里的 vendorId: 0x2341 是 Arduino 设备的供应商 ID,你可以根据实际情况进行修改。可以根据供应商 ID、产品 ID 等设置过滤条件:

navigator.usb.requestDevice({ filters: [{ vendorId: 0x2341 }] })

注意事项

  1. 浏览器支持:确保你的浏览器支持 WebUSB API(如 Chrome)。
  2. 安全性:WebUSB API 设计用于安全访问 USB 设备,但你仍需要确保你的应用处理 USB 设备时遵循最佳安全实践。
  3. 用户体验:确保用户了解为何需要授予权限,并提供清晰的引导和反馈。

通过这种方式,你可以在 Vue2 应用中引导用户选择和授予 USB 设备权限,从而实现对 USB 设备的监听和操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【practise】string_atoi

今天来分享一道比较平常的练习题&#xff0c;说实话我自己写了半天&#xff0c;自己写的很烂最后还是看的答案… 1.题目概要 题目链接&#xff1a;LINK 2.题目难点 这个题目有两个难点&#xff0c;如下&#xff1a; 拿到了全部都是数字字符的字符串&#xff0c;怎么将这个…

新160个crackme - 019-Acid Bytes.3

运行分析 需要破解Name和Serial PE分析 upx壳 linux系统&#xff1a;upx -d CrackMe3.exe 脱壳发现是Delphi系统&#xff0c;32位 静态分析&动态调试 找到关键字符串&#xff0c;进入关键函数 静态分析&#xff0c;发现了Name和Serial明文 验证成功

深入理解 Git `git add -p` 命令中的交互选项

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

2 路模拟量转 Lora模块(开关量,0-10V,4-20ma)

一、功能概述 本产品是一款无线中继器&#xff0c;将 0~ 10V 电压信号转为无线信号&#xff0c; 通过无线方式远传&#xff0c;实现远程通信功能。采用 Lora 无线通信技术&#xff0c; 工作中心频率 433M&#xff0c;空旷传输距离 7000 米。点对点电流远传&#xff0c;用无 线…

智慧工厂数字孪生解决方案

项目背景 随着工业自动化和智能化的不断深入&#xff0c;智慧工厂正成为制造业的新标杆。数字孪生技术作为智慧工厂的核心&#xff0c;通过物理模型、传感器更新、运行历史等数据的集成&#xff0c;实现对现实世界的映射&#xff0c;反映实体装备的全生命周期过程。 方案简介 …

Nacos在Docker上单机模式部署

文章目录 前言一、Nacos二、单机Docker部署 前言 Nacos是阿里巴巴开源的一款用于动态服务发现、配置管理和服务管理的平台。它是“Dynamic Naming and Configuration Service”的缩写&#xff0c;旨在帮助用户实现微服务架构中的服务注册与发现、配置管理、动态DNS服务等功能。…

【一文了解大数据及数据要素,浅说隐私计算、联邦学习】

大数据 不等于 数据要素 大数据&#xff1a;大数据指的是体量巨大、增长迅速且结构复杂的数据集合。传统的数据处理工具无法有效存储和分析这些数据。大数据的处理涉及新的技术和方法&#xff0c;以提取有用的信息和知识。 数据作为新型生产要素&#xff0c;是数字化、网络化、…

C语言bsearch函数

目录 开头1.什么是bsearch函数2.bsearch函数的第五个参数的写法3.bsearch函数的实际运用有序数组查询有序字符串查询有序二维字符串数组查询 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来学一下关于C语言里的bsearch函数的一些知识。 1.什么是bsearch函…

Ubuntu系统中下载安装Checkmk,搭建网络监控系统

文章目录 checkmk是什么&#xff1f;下载安装checkmkUbuntu系统安装选择checkmk版本下载checkmk安装checkmk检查checkmk版本创建checkmk站点启动checkmk及站点 推荐阅读 checkmk是什么&#xff1f; Checkmk 是一款开源的、可扩展的、企业级的网络监控工具。Checkmk提供了丰富的…

unity2D游戏开发14漫游

漫游算法 让敌人在地图上漫游,发现玩家在附加,就会追击,直到玩家逃跑或者杀死玩家 将Enemy预购件拖进场景,并将实例EnemyObject添加CircleCollider2D,选中Is Trigger复选框 创建漫游脚本 选中EnemyObject,点击Animation,右击enemy-idle-1,选择Set as Layer Default St…

发现编程新乐趣,20个Python小游戏源码宝藏,快来挖掘属于你的惊喜!(附源码)

经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&#xff0c;大家有没有认真想过&#xff0c;可能是我们的学习方法不对&#xff1f; 比方说&#xff0c;你有没有想过&#xff0c;可以通过打游戏来学编程&#xff1f; 今天我想跟大家分享几个Python小游…

Node.js(5)——包

包 包的概念&#xff1a;将模块&#xff0c;代码&#xff0c;其他资料聚合成一个文件夹 分类&#xff1a; 项目包&#xff1a;主要用于编写项目和业务逻辑 软件包&#xff1a;封装根据和方法进行使用 要求&#xff1a;根目录中&#xff0c;必须有package.json文件&#xff08…

美林数据Tempo Talents | 两大资源中心,打造开放、成长型数智人才能力平台

在数字化时代的大潮中&#xff0c;高校作为知识与人才培养的重要阵地&#xff0c;独立分散的课程资源管理方式已无法满足现代教育的需求&#xff0c;而数据资源的分散和碎片化也阻碍了科研和教学工作的深入进行。那么&#xff0c;高校如何打造一个集中、高效的课程与数据资源中…

C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享

场景 作为一名C#的Winform开发者&#xff0c;势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。 当经历过几年企业级开发的磨炼&#xff0c;再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。 作为一名终身学习的信奉者&#xff0c;秉承Java体系需持续…

安卓手机数据恢复技巧之5个方法指南, 帮你吃上一次后悔药!

倘若您不慎于 Android 设备里删掉了宝贵的照片、视频以及文件&#xff0c;其后果恐怕难以承受。不过无需忧虑&#xff01;您能够在这篇极具价值的文章中探寻 5 款免费的 Android 数据恢复软件与应用程序。我们会阐述每一种工具最为令人称奇的功能以及其优劣势所在。在读完这篇全…

CSS学习 01 利用鼠标悬停制造文本隐藏效果

效果&#xff1a; 在正常状态下&#xff0c;剧透内容的背景色和文本颜色都是黑色&#xff0c;导致剧透内容看起来是隐藏的&#xff08;黑色文本在黑色背景上不可见&#xff09;。当鼠标悬停在剧透内容上时&#xff0c;背景色和文本颜色恢复为初始值&#xff0c;使得剧透内容可…

react-native 从入门到实战系列教程一底部导航及页面切换

react-native 里面的导航有点繁琐&#xff0c;需要引入 react-navigation 这个库。也是官网推荐的。整个过程不难&#xff0c;就是配置比较繁琐&#xff0c;还会因为网络的原因&#xff0c;时常报错&#xff0c;需要多试几次。排查错误&#xff0c;需要多看文档。安装完依赖&am…

Java同城信息付费系统对接微信广告系统小程序源码

解锁同城新商机&#xff01;同城信息付费系统如何高效对接微信广告 &#x1f680; 引言&#xff1a;同城信息付费的新纪元 在这个信息爆炸的时代&#xff0c;同城信息服务平台如雨后春笋般涌现&#xff0c;为用户提供了便捷的生活服务入口。然而&#xff0c;如何在众多平台中…

8月1日SpringBoot学习笔记

今天内容:配置maven 搭建springboot项目 约定大于配置 IOC DI 常用注解 springbean的作用域 springbean的生命周期 Springboot 创建springboot项目 maven项目添加springboot变成的springboot项目 具体步骤参考&#xff1a;http://t.csdnimg.cn/2NTuK与http://t.…

matlab y=sin(x) - 2/π*(x)函数绘制

[TOC](matlab ysin(x) - 2/π*(x)函数绘制) ysin(x) - 2/π*(x) clc; clear; close all; x_axis_length 10; y_axis_length 10; % 创建 x 值向量 x_positive linspace(0.1, 10, 1000); % 正半轴上的 x 值 x_negative linspace(-10, -0.1, 1000); % 负半轴上的 x 值% 计算…