讲师中心 微信公众号
AI工具推荐 视频效率加速

js怎么获取设备信息

星晨君_5434

星晨君_5434

发布时间:2025-08-01 08:41:01

|

626人浏览过

|

来源于php中文网

原创

在javascript中获取设备信息需区分浏览器和node.js环境;2. 浏览器中通过navigator对象获取useragent、platform、language等信息,并结合正则或第三方库解析浏览器类型;3. node.js中使用os和process模块获取操作系统类型、cpu架构、内存、主机名及node版本;4. 判断移动设备应结合useragent关键词和触摸支持特性(如'ontouchstart'或maxtouchpoints);5. navigator.useragent不可靠因可被用户修改、浏览器厂商调整或隐私策略限制;6. 兼容性处理应采用特性检测、polyfill、第三方库、渐进增强、多环境测试和错误处理等策略;7. 注意隐私安全,避免过度收集信息,防止设备指纹追踪。

js怎么获取设备信息

获取设备信息,在JavaScript里其实挺微妙的。你得区分是在浏览器环境还是Node.js环境,这俩获取方式完全不一样。浏览器里主要是靠navigator对象,Node.js则需要一些额外的模块。

js怎么获取设备信息

解决方案

浏览器环境:navigator对象

js怎么获取设备信息

浏览器里,navigator对象是你的好朋友。它暴露了各种关于浏览器和操作系统的信息。但是,注意!不同浏览器对navigator的实现可能略有差异,所以要做好兼容性处理。

// 获取用户代理字符串
const userAgent = navigator.userAgent;
console.log("User Agent:", userAgent);

// 获取平台信息 (例如 "Win32", "Linux x86_64", "MacIntel")
const platform = navigator.platform;
console.log("Platform:", platform);

// 获取浏览器名称(不完全可靠,userAgent更常用)
const appName = navigator.appName;
console.log("App Name:", appName);

// 获取浏览器版本(不完全可靠,userAgent更常用)
const appVersion = navigator.appVersion;
console.log("App Version:", appVersion);

// 获取语言
const language = navigator.language || navigator.userLanguage; // 兼容不同浏览器
console.log("Language:", language);

// 获取设备是否支持触摸
const touchEnabled = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0);
console.log("Touch Enabled:", touchEnabled);

User Agent字符串解析:

js怎么获取设备信息

userAgent字符串包含了大量信息,但直接使用起来比较麻烦。你可以用正则表达式或者专门的库来解析它,提取出操作系统、浏览器类型、版本等信息。

function getBrowserInfo() {
  const ua = navigator.userAgent;
  let tem;
  let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
  if (/trident/i.test(M[1])) {
    tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
    return 'IE ' + (tem[1] || '');
  }
  if (M[1] === 'Chrome') {
    tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
    if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
  }
  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
  if ((tem = ua.match(/version\/(\d+)/i)) != null) {
    M.splice(1, 1, tem[1]);
  }
  return M.join(' ');
}

console.log("Browser Info:", getBrowserInfo());

Node.js环境:os和process模块

Node.js里,navigator不存在。你需要使用os和process模块。

const os = require('os');
const process = require('process');

// 获取操作系统类型 (例如 'Windows_NT', 'Linux', 'Darwin')
const osType = os.type();
console.log("OS Type:", osType);

// 获取操作系统版本
const osRelease = os.release();
console.log("OS Release:", osRelease);

// 获取CPU架构 (例如 'x64', 'arm64')
const osArch = os.arch();
console.log("OS Architecture:", osArch);

// 获取主机名
const hostname = os.hostname();
console.log("Hostname:", hostname);

// 获取Node.js版本
const nodeVersion = process.version;
console.log("Node.js Version:", nodeVersion);

// 获取CPU信息
const cpus = os.cpus();
console.log("CPUs:", cpus); // 返回一个数组,包含每个CPU的信息

// 获取内存信息
const totalMemory = os.totalmem();
const freeMemory = os.freemem();
console.log("Total Memory:", totalMemory);
console.log("Free Memory:", freeMemory);

更深入的设备信息获取:

无论是浏览器还是Node.js,直接获取设备型号、制造商等信息都比较困难。

  • 浏览器: 可以考虑使用第三方库,例如bowser,它可以更精确地解析userAgent字符串。或者,如果你的应用是PWA,可以使用Web APIs,比如Battery API(获取电池信息),Network Information API(获取网络连接信息)。但这些API的兼容性和权限问题需要注意。
  • Node.js: 可以尝试一些系统信息收集的npm包,例如systeminformation。但要注意,这些包可能需要安装额外的系统依赖,并且可能存在跨平台兼容性问题。

安全性和隐私:

获取设备信息时,务必注意用户隐私。不要收集不必要的敏感信息,并确保遵循相关的隐私政策和法规。 尤其是在浏览器环境,过度收集设备信息可能会被认为是fingerprinting,对用户隐私造成威胁。

如何判断用户是否使用了移动设备?

判断用户是否使用了移动设备,最常用的方法还是通过navigator.userAgent。但是,直接判断字符串是否包含"Mobile"或者"Android"这样的关键词并不靠谱,因为很多桌面浏览器也可能伪装成移动设备。

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载

更可靠的方法是结合userAgent和navigator.maxTouchPoints属性。

function isMobileDevice() {
  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
    return true; // 粗略判断
  }

  // 结合触摸事件支持判断
  if ('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0) {
    return true; // 更准确的判断
  }

  return false;
}

console.log("Is Mobile Device:", isMobileDevice());

这种方法先通过userAgent进行初步判断,如果包含常见的移动设备关键词,则认为是移动设备。然后,再通过检查是否支持触摸事件来进一步确认。如果支持触摸事件,则更倾向于认为是移动设备。

为什么navigator.userAgent不可靠?

navigator.userAgent字符串可以被用户修改,这意味着用户可以伪装成任何浏览器或设备。所以,仅仅依赖userAgent来判断设备信息是不准确的。

浏览器厂商也会出于兼容性或其他原因修改userAgent字符串,导致其与实际情况不符。

现代浏览器越来越注重用户隐私保护,可能会限制userAgent字符串的详细程度,甚至对其进行随机化处理。

如何处理不同浏览器之间的兼容性问题?

处理浏览器兼容性问题,是前端开发的永恒主题。对于设备信息获取,可以考虑以下几个方面:

  1. 特性检测: 不要直接假设某个API一定存在,而是先进行特性检测,判断浏览器是否支持该API。例如:

    if ('geolocation' in navigator) {
      // 使用地理位置API
    } else {
      // 提供备选方案
    }
  2. 使用polyfill或shim: 对于一些较新的API,可以使用polyfill或shim来提供兼容性支持。例如,es5-shim可以为老版本浏览器提供ECMAScript 5的特性支持。

  3. 使用第三方库: 一些第三方库已经封装了各种兼容性处理,可以简化开发工作。例如,Modernizr可以检测浏览器支持的各种特性。

  4. 渐进增强和优雅降级: 采用渐进增强的策略,先保证基本功能在所有浏览器上可用,然后逐步添加更高级的特性。对于不支持这些特性的浏览器,提供优雅的降级方案。

  5. 测试: 在各种浏览器和设备上进行充分的测试,确保应用在不同环境下都能正常工作。

  6. 错误处理: 合理处理可能出现的错误,例如API调用失败、权限被拒绝等。

  7. 使用Typescript: 可以在开发时使用Typescript,它可以在编译阶段发现一些潜在的兼容性问题。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

332

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

540

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

411

2026.03.13

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

326

2026.06.03

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

738

2026.06.16

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4856

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

3341

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

9302

2023.07.05

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Docker Desktop故障排查手册
Docker Desktop故障排查手册

共0课时 | 0人学习

phpcms开发教程
phpcms开发教程

共70课时 | 29.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn