js获取手机设备类型

苹果

 //iOS
 isIPhone = (userAgent: string) => /iphone/i.test(userAgent);
 isIPod = (userAgent: string) => /ipod/i.test(userAgent);
 isIPad = (userAgent: string) => /iPad/i.test(userAgent);
 public isIOS = (userAgent: string) => this.isIPhone(userAgent) || this.isIPod(userAgent) || this.isIPad(userAgent);

注:最新ipad pro版本是MAC系统,无法通过浏览器信息来区分ipad pro与MAC,详细浏览器信息:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15

已经有很多开发吐槽过,苹果的这个BUG:https://developer.apple.com/forums/thread/119186
所以,除非苹果修复这个设计问题,否则我们只能绕道规避。
目前大家区分ipad pro与MAC的方法是,判断设备是否支持触摸:

isIPadPro = (userAgent: string) => /macintosh/i.test(userAgent) && navigator.maxTouchPoints > 1;

参考链接:
https://stackoverflow.com/questions/57776001/how-to-detect-ipad-pro-as-ipad-using-javascript
https://stackoverflow.com/questions/57765958/how-to-detect-ipad-and-ipad-os-version-in-ios-13-and-up

安卓

大部分安卓的浏览器信息都有android字段

 //android
 public isAndroid = (userAgent: string) => /android/i.test(userAgent);

微信浏览器

 // 微信
 public isWechat = (userAgent: string) => /micromessenger/i.test(userAgent);
 public isAppWechat = (userAgent: string) => this.isWechat(userAgent) && !/windowswechat/i.test(userAgent);

是否是手机端

添加mobile作为补充,当然直接使用mobile问题也不大

 // 手机
 public isMobile = (userAgent: string) => this.isAndroid(userAgent) || this.isIOS(userAgent) || /mobile/i.test(userAgent);

userAgent的字段介绍,可参考其它博客 浏览器的常见User Agent 各字段的解释

完整代码:

declare type UserAgentProvider = {
  isIOS: (userAgent: string) => void;
  isAndroid: (userAgent: string) => void;
  isMobile: (userAgent: string) => void;
  isWechat: (userAgent: string) => void;
};

class Index implements UserAgentProvider {
  // iOS
  isIPhone = (userAgent: string) => /iphone/i.test(userAgent);
  isIPod = (userAgent: string) => /ipod/i.test(userAgent);
  isIPad = (userAgent: string) => /iPad/i.test(userAgent) || /Macintosh/i.test(userAgent);
  isIPadPro = (userAgent: string) => /macintosh/i.test(userAgent) && navigator.maxTouchPoints > 1;
  public isIOS = (userAgent: string) =>
    this.isIPhone(userAgent) ||
    this.isIPod(userAgent) ||
    this.isIPad(userAgent)||
    this.isIPadPro(userAgent);

  // android
  public isAndroid = (userAgent: string) => /android/i.test(userAgent);

  // 手机
  public isMobile = (userAgent: string) => this.isAndroid(userAgent) || this.isIOS(userAgent) || /mobile/i.test(userAgent);

  // 微信
  public isWechat = (userAgent: string) => /micromessenger/i.test(userAgent);
  public isAppWechat = (userAgent: string) => this.isWechat(userAgent) && !/windowswechat/i.test(userAgent);
}

export default new Index();

本文链接:

https://yoefs.com/archives/18/
1 + 1 =
快来做第一个评论的人吧~