isChinaUser 是一个开源的浏览器地区识别工具,用于在前端判断当前浏览器环境是否更像中国用户或中国大陆设备。它默认不依赖 IP 归属地查询,也不需要服务端 GeoIP 库,而是通过语言、时区、Emoji 渲染和中文字体等本地信号,给出一个轻量级环境判断结果。

做出海项目或者跨境网站时,开发者经常会遇到一个场景:需要根据访问者的所在地区做简单的页面跳转、镜像入口提示或合规说明。传统做法通常依赖服务端 GeoIP 库,但对于纯前端部署的静态站、文档站或轻量级 SaaS 来说,接入服务端逻辑会增加额外成本。

简单理解,isChinaUser 不是 GeoIP 服务,也不是精准定位工具,而是一个基于浏览器语言、系统时区、Emoji、字体和可选网络探针的前端环境判断库。如果手动启用网络探测,它还可以通过探针图片的可达性,辅助判断当前网络出口特征。

浏览器地区识别工具 isChinaUser 是如何判断环境的?

常规的地区识别通常依赖 IP,而 isChinaUser 采用的是“环境特征组合”思路。它会在用户加载网页时,读取浏览器和系统暴露出的几类信号,用来判断当前环境是否更像中国用户或中国大陆设备。

  • 语言与时区(基础信号):读取 navigator.languagenavigator.languages,判断首选或备用语言是否包含中文;同时读取系统底层的 Intl 时区,判断是否接近中国大陆常见时区,例如 Asia/Shanghai 或 UTC+8。
  • Emoji 渲染差异(设备探测):利用不同系统和浏览器在特定 Emoji 渲染上的差异,进行轻量级设备特征识别。
  • 本地字体探测(环境指纹):通过 Canvas 检测浏览器是否能调用常见中文字体,例如 DengXian、FangSong、仿宋、等线等。
  • 网络连通性(异步探测):这是一个可选的异步方法。如果手动调用,它会尝试加载特定探针图片,通过不同探针的可达性,辅助判断当前网络出口特征。

适合哪些场景:出海网站、静态站与前端分流

这个库的核心受众是前端开发者与出海项目站长。它真正有用的地方,不是替代服务端风控,而是为前端展示逻辑提供一个低成本的辅助判断信号。

例如,当一个 SaaS 官网需要根据访问环境展示不同的产品说明、服务可用性提示或合规说明,或者文档站需要给疑似国内用户展示境内 CDN 镜像入口时,可以在引入该库后,用 if (isChinaUser()) 这类条件判断作为前端展示逻辑的一部分。

在默认同步判断模式下,isChinaUser 主要依赖本地浏览器信号,不会主动发起网络探测请求;如果手动开启网络探针,则需要额外加载探针图片,结果也会受到网络环境、代理和浏览器隐私设置影响。

isChinaUser 基本用法示例

项目可以通过 npm 安装,适合放在前端页面、静态站或轻量级 Web 应用里做展示逻辑判断。

npm i is-china-user
import { isChinaUser } from 'is-china-user';

if (isChinaUser()) {
  // 展示境内镜像入口、访问提示或本地化说明
} else {
  // 展示默认内容
}

默认的 isChinaUser() 主要依赖本地浏览器环境信号。如果需要加入网络可达性判断,可以按项目文档再调用异步网络探测方法。

不能替代 GeoIP,也不是风控工具

isChinaUser 能解决的是“前端先做一个大致判断”的问题,不是精准定位,也不是账号风控系统。它读到的是浏览器和系统环境信号,这些信号本身就可能被用户修改或被浏览器隐私功能干扰。

⚠️ 使用前要注意如果用户改过系统语言、时区,使用纯英文系统、非默认字体环境,或者开启了 Canvas 指纹保护,判断结果都可能不准。所以它不适合作为支付风控、账号封禁、地区限制或法律合规判断的唯一依据。

更合适的用法,是把它当成一个前端辅助信号:比如给静态站、文档站或轻量级 SaaS 做访问提示、镜像入口提示、展示内容切换。涉及数据合规、跨境限制或账号安全时,还是应该使用服务端 GeoIP、业务规则和日志数据一起判断。


isChinaUser 项目主页与在线演示


🐙 isChinaUser GitHub 项目主页
查看各项探测逻辑的源码实现,以及如何在项目中安装使用的官方文档。


🧪 isChinaUser 在线 Demo
打开在线测试页,直观验证当前设备在语言、时区、字体等维度的检测结果。