Client 客户端信息工具

GB.Client 是一组相互独立的浏览器客户端信息方法,可用于判断操作系统、浏览器、移动端和微信环境,并读取当前页面的 URL、路径及查询参数。它没有实例状态配置过程,也不采用链式调用。

安装与引入

浏览器直接引入

<script src="https://cloud.m775.net/js/client.js"></script>

npm 项目

npm i @gentbo/client

import '@gentbo/client';

基本使用

通过 GB.Client() 选择需要的功能并直接调用。各方法彼此独立,不需要初始化。

const os = GB.Client().os();
const browser = GB.Client().browser(false);
const mobile = GB.Client().isMobile();
const weixin = GB.Client().isWeixin();

console.log({ os, browser, mobile, weixin });

API 速查

.os()返回根据 User-Agent 判断的操作系统名称。
.browser(simple?)返回浏览器名称;传入 false 时返回名称和版本对象。
.isMobile()返回是否匹配常见移动端 User-Agent。
.isWeixin()返回当前页面是否运行在微信内置浏览器中。
.query()返回不包含开头问号的原始查询字符串。
.param(key?)读取全部查询参数,或读取指定参数。
.url()返回 document.URL,即当前页面完整地址。
.path()返回 location.pathname,即当前页面路径。

判断操作系统

os() 将 User-Agent 转为小写后匹配系统标识,并缓存检测结果。

windowsUser-Agent 包含 win。
androidUser-Agent 包含 android。
linux / unixUser-Agent 包含对应系统标识。
macUser-Agent 同时包含 macintosh 和 pc。
iosUser-Agent 包含 iphone 或 ipad。
undefined没有匹配到已知系统。
if (GB.Client().os() === 'ios') {
  document.body.classList.add('is-ios');
}

获取浏览器信息

browser() 默认只返回浏览器名称。传入严格的 false 时返回包含名称和版本的对象。

console.log(GB.Client().browser());
// 例如:chrome

console.log(GB.Client().browser(false));
// 例如:{ name: 'chrome', ver: '126.0.0.0' }

当前检测规则覆盖 Edge、Chrome、Safari、IE、Firefox、Maxthon 和 Opera 等标识。没有匹配时,名称与版本均为字符串 undefined。

移动端与微信环境

.isMobile()匹配 iPhone、iPod、Android、Symbian、Windows Phone 和 mobile 等标识。
.isWeixin()检查 User-Agent 中是否包含 MicroMessenger,返回 Boolean。
if (GB.Client().isWeixin()) {
  showWeixinGuide();
}

if (GB.Client().isMobile()) {
  document.body.classList.add('mobile-layout');
}

微信、支付宝等内置浏览器通常也包含 Chrome 或 Safari 标识。判断微信环境时应使用 isWeixin(),不要依赖 browser() 的名称。

读取 URL 与查询参数

假设当前地址为 https://example.com/search?page=2&keyword=gentbo:

GB.Client().url();
// https://example.com/search?page=2&keyword=gentbo

GB.Client().path();
// /search

GB.Client().query();
// page=2&keyword=gentbo

GB.Client().param();
// { page: '2', keyword: 'gentbo' }

GB.Client().param('page');
// '2'
query()保留原始编码,不包含开头的 ?;没有查询字符串时返回空字符串。
param()使用 URLSearchParams 解码并返回普通对象;没有参数时返回空对象。
param(key)返回对应字符串值;字段不存在时返回 undefined。

缓存与使用边界

User-Agent脚本加载时读取一次;os、browser、isMobile 和 isWeixin 的结果还会在首次调用后缓存。
查询参数query 字符串在脚本加载时保存,param 对象在首次调用时生成;单页应用修改 URL 后不会自动刷新这两个结果。
重复参数param() 使用 Object.fromEntries;同名参数出现多次时只保留最后一个值。
检测精度User-Agent 可以被修改或弱化,检测结果适合界面适配,不应作为鉴权或安全判断依据。
浏览器环境依赖 navigator、window、document 和 URLSearchParams,不能直接用于 Node.js 服务端。