在浏览器中,JavaScript 无法直接获取完整的系统级信息(如硬件配置、操作系统版本等),但可以通过以下 API 获取部分与设备和浏览器相关的信息:

​1. 使用 navigator 对象​

navigator 对象提供了浏览器和操作系统的基础信息:

javascript
复制
// 操作系统和浏览器信息
const systemInfo = {
userAgent: navigator.userAgent, // 包含操作系统和浏览器版本(但可能被篡改)
platform: navigator.platform, // 操作系统架构(如 "Win32", "MacIntel")
language: navigator.language, // 浏览器语言
hardwareConcurrency: navigator.hardwareConcurrency, // CPU 核心数
deviceMemory: navigator.deviceMemory, // 内存大小(GB,仅限 HTTPS)
}; console.log(systemInfo);

​2. 屏幕信息(screen 对象)​

javascript
复制
const screenInfo = {
width: screen.width, // 屏幕宽度
height: screen.height, // 屏幕高度
colorDepth: screen.colorDepth, // 颜色位数
orientation: screen.orientation?.type, // 屏幕方向(如 "landscape")
};

​3. 网络信息(navigator.connection)​

通过 Network Information API 获取网络状态(需 HTTPS):

javascript
复制
const networkInfo = {
effectiveType: navigator.connection?.effectiveType, // 网络类型(如 "4g")
downlink: navigator.connection?.downlink, // 下行速度(Mbps)
rtt: navigator.connection?.rtt, // 延迟(毫秒)
};

​4. 电池状态(navigator.getBattery())​

异步获取设备电池信息(需用户授权):

javascript
复制
navigator.getBattery().then(battery => {
console.log({
level: battery.level * 100 + '%', // 电量百分比
charging: battery.charging, // 是否在充电
});
});

​5. WebGL 渲染器信息(通过 WebGL API)​

获取 GPU 渲染器信息(可能被伪造):

javascript
复制
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
if (gl) {
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const gpuInfo = {
vendor: gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL),
renderer: gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL),
};
console.log(gpuInfo);
}

​6. 时区和地理位置​

  • ​时区​​:

    javascript
    复制
    const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
  • ​地理位置​​(需用户授权):
    javascript
    复制
    navigator.geolocation.getCurrentPosition(pos => {
    console.log(pos.coords.latitude, pos.coords.longitude);
    });

​注意事项​

  1. ​隐私限制​​:浏览器会限制敏感信息(如完整硬件信息),部分 API 需要 HTTPS 或用户授权。
  2. ​数据可靠性​​:userAgent 等字段可被篡改,不适合用于安全验证。
  3. ​跨浏览器差异​​:不同浏览器支持的 API 可能不同(如 deviceMemory 仅限 Chrome)。

​完整示例​

javascript
复制
async function getSystemInfo() {
return {
navigator: {
userAgent: navigator.userAgent,
platform: navigator.platform,
language: navigator.language,
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
},
screen: {
width: screen.width,
height: screen.height,
colorDepth: screen.colorDepth,
},
network: navigator.connection ? {
effectiveType: navigator.connection.effectiveType,
downlink: navigator.connection.downlink,
} : null,
battery: await navigator.getBattery?.().catch(() => null),
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
};
} getSystemInfo().then(console.log);

如果需要更详细的系统信息(如 CPU 型号、磁盘空间等),浏览器环境无法直接获取,通常需要依赖后端或原生应用(如 Electron)。

来自于DeepSeek V3

浏览器js如何获取系统信息?的更多相关文章

  1. js基础--获取浏览器当前页面的滚动条高度的兼容写法

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 在开发中,兼容性问题是最常见的,今天就来介绍一下关于获取滚动条高度的兼容性写法,宽度同理,我在这里就不一一解释了 各浏览器 ...

  2. js动态获取浏览器或页面等容器的宽高

    首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHei ...

  3. js自定义获取浏览器宽高

    /** * @description js自定义获取浏览器宽高 * * IE8 和 IE8 以下的浏览器不兼容 * window.innerWidth * window.innerHeight * * ...

  4. js中获取css属性

    直接获取 window.onload = function() { var but = document.getElementById('button'); var div = document.ge ...

  5. Ajax清除浏览器js、css、图片缓存的方法

    做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...

  6. JS远程获取网页源代码的例子

    js代码获取网页源代码. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < ...

  7. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...

  8. js无法获取.net设置的cookie

    使用CookieHelper帮助类: public class CookieHelper { #region 获取Cookie /// <summary> /// 获得Cookie的值 / ...

  9. js里获取页面高度和文档高度

    $(window).height() 和 $(document).height()的区别 $(window).height()代表了当前可见区域的大小,$(document).height()则代表了 ...

  10. js jquery获取当前元素的兄弟级 上一个 下一个元素

    原博地址:http://www.jb51.net/article/71782.htm var chils= s.childNodes;  //得到s的全部子节点 var par=s.parentNod ...

随机推荐

  1. Git Bash终端中文输出显示乱码解决方案

    原文链接:https://blog.csdn.net/u012145252/article/details/81775362,感谢作者的整理和分享 我的情况竟然属于最后一种... 解决git stat ...

  2. Luogu P10843 Turtle and Cycles 题解 [ 蓝 ] [ 差分 ] [ 前缀和 ] [ 贪心 ] [ 数学 ]

    Turtle and Cycles:修改转化为交换差分数组的 trick 运用.这个 trick 实际上在 NOIp2021 里出过一次了. 转化 首先,\(a_{(i - 1) \bmod n} + ...

  3. MAC M1芯片 使用CocoaPods报错 ffi

    sudo arch -x86_64 gem install ffiarch -x86_64 pod install

  4. [BZOJ3569] DZY Loves Chinese II 题解

    考虑不联通的情况.图不好做,就造一棵生成树出来,由于是无向图,所以只有树边和返祖边. 发现在一条树边断开后,生成树会分成两个连通块,由覆盖这条树边的返祖边链接,只有这些返祖边也全部断开,原图才会不联通 ...

  5. Python - [01] 简介

    人生苦短,我用Python 一.Python 是什么 Python是一个高层次的结合了解释型.编译型.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字, ...

  6. Week09_day05(Hbase的基本使用)

    使用HBase 和 Hbase使用帮助 1).进入HBase  #使用命令进入HBase Shell $ hbase shell The HBase shell is the (J)Ruby IRB ...

  7. 使用Node.js打造交互式脚手架,简化模板下载与项目创建

    在上一篇文章中,我们探讨了如何构建一个通用的脚手架框架.今天,我们将在此基础上进一步扩展脚手架的功能,赋予它下载项目模板的能力. 通常情况下,我们可以将项目模板发布到 npm 上,或者在公司内部利用私 ...

  8. Stream4Graph:动态图上的增量计算

    作者:张奇 众所周知,当我们需要对数据做关联性分析的时候,一般会采用表连接(SQL join)的方式完成.但是SQL join时的笛卡尔积计算需要维护大量的中间结果,从而对整体的数据分析性能带来巨大影 ...

  9. SpringBoot+Nginx大文件传输

    Nginx配置 # 公众端的附件上传 location /api/visitor/upload { # Pass altered request body to this location uploa ...

  10. PVE常用命令

    1.查看集群下的节点信息 root@pve63-node172:~# pvecm nodes Membership information ---------------------- Nodeid ...