浏览器js如何获取系统信息?
1. 使用 navigator 对象
navigator 对象提供了浏览器和操作系统的基础信息:
// 操作系统和浏览器信息
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 对象)
const screenInfo = {
width: screen.width, // 屏幕宽度
height: screen.height, // 屏幕高度
colorDepth: screen.colorDepth, // 颜色位数
orientation: screen.orientation?.type, // 屏幕方向(如 "landscape")
};
3. 网络信息(navigator.connection)
通过 Network Information API 获取网络状态(需 HTTPS):
const networkInfo = {
effectiveType: navigator.connection?.effectiveType, // 网络类型(如 "4g")
downlink: navigator.connection?.downlink, // 下行速度(Mbps)
rtt: navigator.connection?.rtt, // 延迟(毫秒)
};
4. 电池状态(navigator.getBattery())
异步获取设备电池信息(需用户授权):
navigator.getBattery().then(battery => {
console.log({
level: battery.level * 100 + '%', // 电量百分比
charging: battery.charging, // 是否在充电
});
});
5. WebGL 渲染器信息(通过 WebGL API)
获取 GPU 渲染器信息(可能被伪造):
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);
});
注意事项
- 隐私限制:浏览器会限制敏感信息(如完整硬件信息),部分 API 需要 HTTPS 或用户授权。
- 数据可靠性:
userAgent等字段可被篡改,不适合用于安全验证。 - 跨浏览器差异:不同浏览器支持的 API 可能不同(如
deviceMemory仅限 Chrome)。
完整示例
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)。
浏览器js如何获取系统信息?的更多相关文章
- js基础--获取浏览器当前页面的滚动条高度的兼容写法
欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 在开发中,兼容性问题是最常见的,今天就来介绍一下关于获取滚动条高度的兼容性写法,宽度同理,我在这里就不一一解释了 各浏览器 ...
- js动态获取浏览器或页面等容器的宽高
首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHei ...
- js自定义获取浏览器宽高
/** * @description js自定义获取浏览器宽高 * * IE8 和 IE8 以下的浏览器不兼容 * window.innerWidth * window.innerHeight * * ...
- js中获取css属性
直接获取 window.onload = function() { var but = document.getElementById('button'); var div = document.ge ...
- Ajax清除浏览器js、css、图片缓存的方法
做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...
- JS远程获取网页源代码的例子
js代码获取网页源代码. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < ...
- 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。
先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...
- js无法获取.net设置的cookie
使用CookieHelper帮助类: public class CookieHelper { #region 获取Cookie /// <summary> /// 获得Cookie的值 / ...
- js里获取页面高度和文档高度
$(window).height() 和 $(document).height()的区别 $(window).height()代表了当前可见区域的大小,$(document).height()则代表了 ...
- js jquery获取当前元素的兄弟级 上一个 下一个元素
原博地址:http://www.jb51.net/article/71782.htm var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNod ...
随机推荐
- C#中多线程实现后台任务的三种方式
第一种:通过Invoke()在应用程序的主线程上执行指定的委托 //新开一个线程,显示当前时间 new Thread(o => { while (true) { Thread.Sleep(100 ...
- angularjs和ajax的结合使用 (四)
知道的朋友了解 我不是属于讲按部就班技术的那种人.什么xx入门 ,入门到精通,入门到入土. 其实非要严格说的话已经跟angularjs 什么ajax 偏的有点远了,之所以还是叫这个名称,因为都属于we ...
- uni-app路由跳转
navigateTo redirectTo (1)保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面 (如果A->B来回频繁切换,不要A B两个方法都使用 ...
- oracle19.3打补丁
补丁 36582781 - 数据库发布更新 19.24.0.0.240716 本文档在发布时准确无误.有关数据库版本更新 19.24.0.0.240716 的任何更改和其他信息,请参阅 My Orac ...
- Kali 关闭自动锁屏功能
Kali 关闭自动锁屏功能 1.点击 [开始] -> [设置] -> [电源管理器] 2.选择 [安全性],将 [自动锁定会话] 选为 [从不],将 [当系统休眠时锁定屏幕] 取消勾选,点 ...
- Luogu P10997 Partition 题解 [ 蓝 ] [ 分割线 dp ]
Partition:一道 dp 神题,用到了以轮廓线的轨迹来做 dp 的技巧,和敲砖块这题的状态设计有点相似. 观察 首先观察样例,发现整张图可以看作是被两条线分隔开的.同时每个颜色的四个方向上又存在 ...
- 【忍者算法】从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索|LeetCode第240题 搜索二维矩阵 II
从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索 生活中的搜索策略 想象你在一个大型图书馆里找书.这个图书馆的书架是按照两个维度排列的:每个书架从左到右按书名字母顺序排列,从上到下的书架则按照出版年份 ...
- PERT 图表教程
(翻译自: PERT Chart Tutorial) PERT 图表 是(程序评估和审查技术)的首字母缩写.PERT 图是一种项目管理工具,用于在项目中安排.组织和协调任务.它基本上是一种分析完成给定 ...
- OERV兴趣探索:模拟器移植
最近看了很多开源项目,主要都集中在模拟器方面,我指的是游戏模拟器比如GameBoy或者PlayStation这一类.现在想玩这系列的游戏可以在手机或者电脑下载相应的模拟器,并且获取对应的ROM文件 ...
- 【自荐】Catime v1.0.4 一款贼好用的计时器
Github: https://github.com/vladelaina/Catime 仅1.3MB!!!!! 特点 极简设计: 透明界面.点击穿透.可调大小和位置.多语言支持 丰富字体: 47种字 ...