最近公司需求做一个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这个数组会是“以太网”
这三个大字困扰我半天。。。。还是太年轻啊