前端怎么区分“浏览器”(附浏览器大全)

6 阅读4分钟

常见 H5 浏览器环境标识对照表

H5 页面运行时,前端通常不是只区分“浏览器品牌”,而是区分:

  • 普通浏览器
  • App 内嵌浏览器
  • 系统 WebView
  • 小程序容器
  • 桌面客户端容器

下面把常见环境、含义和前端常用 UA 判断代码一起整理出来。

一、常见 H5 浏览器环境对照表

标识 / UA 关键词代表环境类型常见所在场景说明常用判断代码
ChromeChrome / Chromium 浏览器独立浏览器Android、Windows、Mac常见标准浏览器标识,很多 WebView 也会带const isChrome = /chrome/i.test(ua) && !/edg|opr|samsungbrowser/i.test(ua)
SafariSafari 浏览器独立浏览器iPhone、MaciOS 和 macOS 常见const isSafari = /safari/i.test(ua) && !/chrome|crios|edg|opr/i.test(ua)
CriOSiOS Chrome独立浏览器iPhoneiOS 上的 Chrome 标识const isIOSChrome = /crios/i.test(ua)
EdgEdge 浏览器独立浏览器Windows、Mac、移动端微软 Edge 标识const isEdge = /edg/i.test(ua)
FirefoxFirefox 浏览器独立浏览器Windows、Mac、Android火狐浏览器标识const isFirefox = /firefox/i.test(ua)
OPR / OperaOpera 浏览器独立浏览器多平台Opera 标识const isOpera = /opera|opr/i.test(ua)
SamsungBrowser三星浏览器独立浏览器Android 三星设备三星自带浏览器const isSamsungBrowser = /samsungbrowser/i.test(ua)
MicroMessenger微信内 H5 容器App 内嵌浏览器微信中打开链接页面运行在微信环境内const isWeChat = /micromessenger/i.test(ua)
wxwork / WeCom企业微信内 H5 容器App 内嵌浏览器企业微信中打开链接企业微信环境const isWeCom = /wxwork|wecom/i.test(ua)
AlipayClient支付宝内 H5 容器App 内嵌浏览器支付宝中打开链接支付宝环境const isAlipay = /alipayclient/i.test(ua)
DingTalk钉钉内 H5 容器App 内嵌浏览器钉钉中打开链接钉钉环境const isDingTalk = /dingtalk/i.test(ua)
QQ/QQ 内 H5 容器App 内嵌浏览器QQ 中打开链接QQ 环境const isQQ = /qq\\//i.test(ua)
Toutiao / NewsArticle头条系内 H5 容器App 内嵌浏览器资讯流内打开链接字节资讯容器const isToutiao = /toutiao|newsarticle/i.test(ua)
swan/百度系容器 / 小程序相关环境平台容器百度 App百度相关 H5 环境const isBaiduContainer = /swan\\//i.test(ua)
miniProgram小程序 WebView 环境小程序容器微信/支付宝等小程序表示页面运行在小程序 WebView 中const isMiniProgram = /miniprogram/i.test(ua)
WebView通用内嵌浏览器App 内嵌浏览器各类 App泛指内嵌网页容器const isGenericWebView = /webview/i.test(ua)
wvAndroid System WebView系统 WebViewAndroid App 内嵌页常见于 Android 内嵌页const isAndroidWV = /; wv\)/i.test(ua) || /\bwv\b/i.test(ua)
Version/x.x + SafariiOS Safari / iOS WebView 常见组合浏览器或 WebViewiPhoneiOS 环境常见组合const isIOS = /iphone|ipad|ipod/i.test(ua)
Electron桌面客户端内嵌浏览器桌面容器桌面应用页面运行在桌面客户端容器里const isElectron = /electron/i.test(ua)

二、分类理解

分类代表特点
独立浏览器Chrome、Safari、Edge、Firefox 用户主动打开浏览器访问页面
App 内嵌浏览器MicroMessengerAlipayClientDingTalkQQ/页面运行在 App 内,不是独立浏览器
系统 WebViewwvWebView常见于 Android/iOS 宿主 App 打开的 H5
小程序容器miniProgram页面运行在小程序 WebView 中
桌面容器Electron页面运行在桌面客户端容器里

三、开发中建议的判断顺序

前端开发里,通常按下面顺序判断更合理:

判断目标建议判断
是否在特定 App 中打开MicroMessengerAlipayClientDingTalkQQ/wxwork
是否是小程序环境miniProgram
是否是 Android WebViewwv / WebView
是否是 iOS 环境iphone|ipad|ipod
是否是普通浏览器ChromeSafariEdgFirefox

四、推荐的通用代码模板

const ua = navigator.userAgent.toLowerCase();

const env = {
  isChrome: /chrome/i.test(ua) && !/edg|opr|samsungbrowser/i.test(ua),
  isSafari: /safari/i.test(ua) && !/chrome|crios|edg|opr/i.test(ua),
  isIOSChrome: /crios/i.test(ua),
  isEdge: /edg/i.test(ua),
  isFirefox: /firefox/i.test(ua),
  isOpera: /opera|opr/i.test(ua),
  isSamsungBrowser: /samsungbrowser/i.test(ua),

  isWeChat: /micromessenger/i.test(ua),
  isWeCom: /wxwork|wecom/i.test(ua),
  isAlipay: /alipayclient/i.test(ua),
  isDingTalk: /dingtalk/i.test(ua),
  isQQ: /qq\//i.test(ua),
  isToutiao: /toutiao|newsarticle/i.test(ua),
  isBaiduContainer: /swan\//i.test(ua),

  isMiniProgram: /miniprogram/i.test(ua),
  isGenericWebView: /webview/i.test(ua),
  isAndroidWV: /; wv\)/i.test(ua) || /\bwv\b/i.test(ua),

  isIOS: /iphone|ipad|ipod/i.test(ua),
  isAndroid: /android/i.test(ua),
  isElectron: /electron/i.test(ua),
};

五、一句话结论

H5 的运行环境不只是 Chrome、Safari 这些独立浏览器,还包括:

  • App 内嵌浏览器
  • 系统 WebView
  • 小程序容器
  • 桌面客户端容器

所以前端判断 UA 时,重点不是只看“浏览器品牌”,而是看:

页面到底运行在普通浏览器里,还是运行在某个宿主容器里。