JS判断平台、设备和操作系统(react-device-detect, check-platform)

4,410 阅读1分钟

主要用到了下面两个 npm 包

  • react-device-detect: 设备类型, 操作系统, 浏览器类型检测

    • 注意: 该包只能用于 React 项目
  • check-platform: 检测国内App平台(微信, 支付宝...)

react-device-detect 使用

npm i react-device-detect
import {
  isAndroid,
  isChrome,
  isDesktop,
  isEdge,
  isFirefox,
  isIE,
  isIOS,
  isMacOs,
  isMobile,
  isMobileOnly,
  isMobileSafari,
  isSafari,
  isTablet,
  isWindows,
} from 'react-device-detect';

操作系统判断

if (isAndroid) {
  // 安卓系统(安卓手机, 安卓平板...)
}
if (isIOS) {
  // iOS系统(iPhone, iPad, iPod...)
}
if (isMacOs) {
  // macOS系统(Mac, MacBook, MacBook Pro...)
}
if (isWindows) {
  // Windows系统
}

设备类型判断

if (isMobileOnly) {
  // 手机
}
if (isTablet) {
  // 平板(iPad, 安卓平板...)
}
if (isMobile) {
  // 移动设备(手机, 平板...)
}
if (isDesktop) {
  // 桌面端浏览器
}

浏览器类型判断

if (isChrome) {
  // Chrome
}
if (isSafari) {
  // Safari
}
if (isIE) {
  // IE
}
if (isEdge) {
  // Edge || Edge(chromium内核)
}
if (isMobileSafari) {
  // 移动设备(iPhone, iPad...)的Safari
}
if(isFirefox){
  // Firefox
}

常用组合

if (isAndroid && isMobileOnly) {
  // 安卓手机
}
if (isIOS && isMobileOnly) {
  // iPhone
}

Next.js App Router 服务端组件下如何使用 react-device-detect?

服务端组件中, 需要手动调用 getSelectorsByUserAgent 解析 user-agent

import { headers } from 'next/headers';
import { getSelectorsByUserAgent } from 'react-device-detect';

type DeviceDetectSSR = {
  isMacOs?: boolean;
  isMobile?: boolean;
};

/** 服务端组件判断设备类型 */
export function deviceDetectorSSR(): DeviceDetectSSR {
  const headersReadOnly = headers();
  const userAgent = headersReadOnly.get('user-agent');
  const { isMacOs, isMobile } = userAgent && getSelectorsByUserAgent(userAgent);
  return {
    isMacOs,
    isMobile,
    // ...
  };
}

其他平台检测(微信, 企业微信, 支付宝, 钉钉...)

推荐阅读: wywppkd.github.io/check-platf…