在浏览器中,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. ORACLE存储过程中使用游标+BULK COLLECT的应用

    经过半天的折腾,编译通过调试结果正确,掌握此过程中的知识点,oracle存储过程编写就应用到了90%. CREATE OR REPLACE PROCEDURE JUNAN.P_IPT_QUOTN_IN ...

  2. 2024年度Graph+AI开源探索思考

    前记 这篇年度总结其实酝酿了许久,却因诸多原因拖至腊月底,此时赶在春节前发出来,也不失为"农历版"年度总结了.所谓年度总结,一般是"温故而知新",我不太想落入堆 ...

  3. 多个tomcat启停脚本server.sh

    vi server.sh #!/bin/bash export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/j ...

  4. .NET适配HarmonyOS进展

    1. 前言 目前国产化系统浪潮下,适配鸿蒙是中国软件大势所趋,.NET作为最适合开发客户端语言之一,适配鸿蒙系统(HarmonyOS Next)是目前.NET开发者最关心的事情.我目前业余时间正在移植 ...

  5. 『玩转Streamlit』--会话状态管理

    在Web应用开发中,会话管理是一个至关重要的概念,它能够帮助开发者追踪用户在应用中的行为和状态,从而为用户提供更加个性化.连贯且高效的交互体验. Streamlit作为一个简单而强大的用于快速构建和部 ...

  6. RMAN备份时遇到ORA-48132 &ORA-48170且备份变慢案例

    现象描述: 环境: 操作系统:Red Hat Enterprise Linux release 8.10 数据库版本: Oracle 19.24.0.0.0 企业版 备份作业在执行RMAN备份时,告警 ...

  7. ABB机器人本体维修保养方法

    ABB机器人维修保养一般可以参照机器人保养手册里面的描述,这种保养一般分为两种计时方式,一两年内进行一次基础保养或者机器人运行时间不超过10000小时.在对机器人本体进行保养的时候,我们该如何操作呢? ...

  8. 小米9刷twrp Rec 以及写入Magisk详细教程

    首先手机必须先解锁BL锁才能继续: ---------------------- 小米官方BL解锁教程:点此看教程 ---------------------- 解完锁后开始操作: 工具包:点此下载 ...

  9. 创建一个MCP服务器,并在Cline中使用,增强自定义功能。

    MCP介绍 MCP 是一个开放协议,它标准化了应用程序如何向LLMs提供上下文.可以将 MCP 视为 AI 应用程序的 USB-C 端口.正如 USB-C 提供了一种标准化的方法来将您的设备连接到各种 ...

  10. Golang 入门 : 符文

    字符串常用语表示一系列文本字符,而Go的符文(rune)则用于表示单个字符. 字符串字面量由双引号(")包围,但rune字面量由单引号(')包围. Go程序几乎可以使用地球上任何语言的任何字 ...