electron 获取电脑mac地址遇到的坑

2023-11-07

最近公司需求做一个exe程序,无奈只是一个小前端,只能使用electron来实现了

其中一个需求就是每个账号绑定唯一的电脑。

这里选用网卡的mac地址来做这个唯一的字段。

代码很简单 测试也很顺利 

const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true,
      contextIsolation: false,
      //enableRemoteModule:true,
    }
  })

preload.js

window.addEventListener('DOMContentLoaded', () => {
  var os = require("os");
  sessionStorage.mac = os.networkInterfaces().WLAN[0].mac
  sessionStorage.name = os.hostname()
  console.log(sessionStorage.getItem('mac'))
  console.log(sessionStorage.getItem('name'))
    const replaceText = (selector, text) => {
      const element = document.getElementById(selector)
      if (element) element.innerText = text
    }
  
    for (const type of ['chrome', 'node', 'electron']) {
      replaceText(`${type}-version`, process.versions[type])
    }
  })

万万没想到 交付的时候发生无法获取mac的错误

最终更改成这个样子

window.addEventListener('DOMContentLoaded', () => {
  var os = require("os");
  if(os.networkInterfaces().WLAN){
    sessionStorage.mac = os.networkInterfaces().WLAN[0].mac
  }else{
    sessionStorage.mac = os.networkInterfaces()['以太网'][0].mac
  }
  sessionStorage.name = os.hostname()
  console.log(sessionStorage.getItem('mac'))
  console.log(sessionStorage.getItem('name'))
    const replaceText = (selector, text) => {
      const element = document.getElementById(selector)
      if (element) element.innerText = text
    }
  
    for (const type of ['chrome', 'node', 'electron']) {
      replaceText(`${type}-version`, process.versions[type])
    }
  })

通过os.networkInterfaces()获取网卡地址的方法会遇到网线/无线上网这两种情况

个别情况下WLAN这个数组会是“以太网”

这三个大字困扰我半天。。。。还是太年轻啊

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

electron 获取电脑mac地址遇到的坑 的相关文章

  • 斗地主老输?只能领低保?看我用Python写一个AI出牌器!现在一亿欢乐豆了!

    前言 最近在网上看到一个有意思的开源项目 快手团队开发的开源AI斗地主 DouZero 今天我们就一起来学习制作一个基于DouZero的欢乐斗地主出牌器 看看AI是如何来帮助我们斗地主 赢欢乐豆 实现财富自由的吧 首先一起来看看AI斗地主出
  • View那些事儿(1) -- View绘制的整体流程

    写在开头 Android的知识体系十分庞大 在Android的学习道路上难免会遇到学习了新东西就忘了旧东西的情况 本系列文章主要是对自己对View的学习过程进行一个深入的理解与总结 当然还结合自己在实际项目中的一些体会写了一些东西 当用户打
  • LINUX 下 用C语言编写 TCP/IP通信的 sqlite3数据库服务器

    一 功能需求 我们首先明确一下 我们要制作的这个小服务器 需要具备什么功能 1 1 用户的注册和登录 使用sqlite3数据库 插入新的用户和查询用户的名字和密码是否匹配 1 2 查询单词 单词及其解释中 保存在一个文本文件当中 需要打开文
  • Android 12(S) 图形显示系统 - 示例应用(二)

    1 前言 为了更深刻的理解Android图形系统抽象的概念和BufferQueue的工作机制 这篇文章我们将从Native Level入手 基于Android图形系统API写作一个简单的图形处理小程序 透过这个小程序我们将学习如何使用Nat
  • spring boot配置dubbo(properties)

    spring boot与dubbo配置 properties dubbo和zookeeper配合使用 具体的它们之间的配置这里不说了 一 spring boot与dubbo配置有两种方式 1 spring boot在自己的配置文件appli

随机推荐

  • ScratchJr-ScratchJr介绍

    ScratchJr是什么 ScratchJr 是一个入门级的编程语言 它可以让幼儿 5 7岁 创建互动的故事和游戏 孩子利用图形化的程序积木让角色移动 跳跃 舞蹈 唱歌 孩子也可以利用绘图编辑器绘制自己的角色 用麦克风录制自己声音 用照相机
  • QT中野指针问题。

    错误提示 Signal received The inferior stopped because it received a signal from the Operating System Signal name SIGSEGV Sig
  • 服务器共享文件更改名称报错,服务器文件修改

    服务器文件修改 内容精选 换一换 本节操作指导用户实现同一个子网的Windows弹性云服务器之间文件共享 共享文件的云服务器在同一个子网下 且网络互通 在云服务器右下方的网络图标处 右键单击 打开网络和共享中心 打开网络和共享中心单击 更改
  • mysql规范

    数据库表设置规范 字符集一般选择utf8mb4 MySQL5 5 3以后支持 因为utf8mb4是utf8的超集并完全兼容utf8 能够用四个字节存储更多的字符 排序规则一般选择utf8mb4 general ci 比较和排序的时候更快 一
  • 编写一个算法来判断一个数是不是“快乐数”。

    一个 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直 到这个数变为 1 也可能是无限循环但始终变不到 1 如果可以变为 1 那么这个数就是快乐数 示例 输入 19 输出 true 解释 1
  • 用VBS脚本查询纯真IP库QQWry.dat(转)

    查询给的IP地址所在的国家 ADSL服务商名称 前提 需要提供一个纯真的IP库 这个可以只需将从网上搜索QQWry dat进行搜索这个文件下载即可 然后将该文件放到与该脚本同目录下即可 原文地址 http demon tw programm
  • CSMA/CD协议原理及作用

    CSMA CD Carrier Sense Multiple Access with Collision Detection 协议是一种通信协议 它用于在以太网网络中解决多端口同时发送数据的冲突问题 原理 Carrier Sense 在发送
  • jvm的学习方法

    jvm详解 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 SmartyPa
  • debug常规的基本使用

    1 debug启动 在需要的调试的地方打上断点 然后右键debug启动 2 窗口调试功能 1 终止 程序终止 2 放行 有断点则调到下一个断点 没有则直接有运行完 3 跳到下一行 4 进入方法 3 快捷键 F8 跳到下一行 F9 放行 到下
  • Pandas提取数据的几种方式

    文章目录 前言 Pandas读取数据的几种方式 1 read csv 2 read excel 3 read sql 总结 前言 快期末了 数据挖掘的大作业需要用到python的相关知识 这太难为我这个以前主学C 的人了 不过没办法还是得学
  • Oracle 9i中表的在线重定义

    Oracle 9i中表的在线重定义 今天遇到要把数据库中的某张表改成分区表 而且该表在别的地方还有其他的注册信息 如果自己手工建一个分区表的替代该表的话 那就得要手工地去执行该表在其他地方的注册 所以不想删除该表再手工创建同名的分区表 想到
  • 前端预览下载pdf文件

    合同预览 拿到需要合同显示的数据 后台需要的参数 将参数经过base64编码传给后台 后段规定 问题 base64可能会将某些字符串符号编译为空格 后台返回一个文件地址 创建a标签 href指向返回的文件地址 function viewCo
  • Lecture13_光线追踪1(Whitted-Style Ray Tracing)_GAMES101 课堂笔记

    引入光线追踪目的 因为光栅化不能很好地处理全局效果 例如 软阴影 光栅化需要经过两个过程才能形成软阴影 Glossy 反射 既有反射 又有本身材质的粗糙性影响 间接反射 光线在空间中会反射很多次 很难渲染 光栅化速度快 但是质量并不好 表现
  • 如何重新启动k8s集群,并查看的状态

    重新启动k8s集群的方法取决于您使用的部署方式 如果您使用的是kubeadm部署 可以使用以下命令重启集群 kubeadm reset kubeadminit 如果您使用的是其他部署工具 请按照该工具的说明操作 查看集群状态可以使用kube
  • C#显式实现接口函数

    如果一个类实现了一个接口 他可以选择显示实现这个接口 如果显示实现了接口的话 要调用接口的方法 就必须将类型转换为接口去调用 如果要使用类的实例去调用 就必须为类实现该接口函数 例如 interface IShowMessage void
  • Vue3:Typescript与组合式API、defineProps、defineEmits等使用

    标注类型 props 使用 defineProps 使用
  • 【SQL Server 2016】&【SSMS 17】安装

    一 SQL Server 2016安装 1 1 光盘映像下载 SQL Server Downloads 1 2 安装光盘映像 首次安装点击 全新SQL Server独立安装或向现有安装添加功能 产品密钥自动输入 下一步 勾选 我接受许可条款
  • 解决yolov7bug(Command ‘git tag‘ returned non-zero exit status 128.)(IndexError: list index out of ran)

    1 问题 执行train py Command git tag returned non zero exit status 128 原因 使用预训练权重 但路径错误 未找到本地预训练权重 它会自动下载 下载被墙 解决方法 从github下载
  • 透视投影详解

    透视投影详解 概述 投影变换完成的是如何将三维模型显示到二维视口上 这是一个三维到二维的过程 你可以将投影变换看作是调整照相机的焦距 它模拟了为照相机选择镜头的过程 投影变换是所有变换中最复杂的一个 视锥体 视锥体是一个三维体 他的位置和摄
  • electron 获取电脑mac地址遇到的坑

    最近公司需求做一个exe程序 无奈只是一个小前端 只能使用electron来实现了 其中一个需求就是每个账号绑定唯一的电脑 这里选用网卡的mac地址来做这个唯一的字段 代码很简单 测试也很顺利 const mainWindow new Br