在浏览器中,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. FLink自定义Source,不停生产数据

    一.代码模板 VideoOrder.java package net.xdclass.model; import java.util.Date; import lombok.AllArgsConstr ...

  2. 同步一下在notion上写的内容

    之前在notion上写了一些内容,但因为notion上的编辑器和博客园的不太一样,所以不好直接搬运过来,这里同步一下链接: 之前看MIT线性代数网课做的笔记:重温线性代数 算法课笔记之一:分而治之 算 ...

  3. Luogu P1930 亚瑟王的宫殿 题解 [ 蓝 ] [ 分层图最短路 ] [ 枚举 ]

    亚瑟王的宫殿:比较 tricky 的图论. 图论做法 思路 因为是无向图,所以考虑一个经典 trick,把所有点到集合点的距离之和化为集合点到其他所有点的位置之和,就可以从集合点做单源最短路了. 于是 ...

  4. 流程控制之增强for循环

    语法 for (声明语句:表达式){    //代码语句} 实例: package com.yeyue.struct;​public class ForDemo05 {    public stati ...

  5. JavaScript 滚动条滚动到底部才触发按钮是否可用

    应用代码片段: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. Python实现URL自动转二维码的高效方法

    Python实现URL自动转二维码的高效方法 安装包依赖 pip install qrcode pip install pillow 程序 import qrcode data = "htt ...

  7. Linux操作文件IO

    Linux操作文件IO 参考自:[北京迅为]嵌入式linux开发指南_v1.1(i.MX6ULL) 文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制: 标准 IO 是 ...

  8. 几乎全平台的C语言JSON解析工具cJSON[转载]

    最近在做一个外设管理平台,用PYTHON写了一个连接管理,兼容串口和套接字的连接,然后抽象为设备统一管理.使用套接字时JSON是一种很好的数据封装类型,假设我需要远程操控一个设备,发送一个JSON的数 ...

  9. IDM 下载器 汉化注册激活

    将以下程序更改为.bat文件.使用windows的管理员权限打开. 汉化于:https://github.com/WindowsAddict/IDM-Activation-Script @setloc ...

  10. Vue 前端页面利用MediaRecorder实现音频录制

    Don't Talk, code is here: 重点是startRecord 方法 <template> <div> <el-tooltip class=" ...