haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……

Home Page:http://www.h-camel.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[js] 第25天 写一个判断设备来源的方法

haizhilin2013 opened this issue · comments

第25天 写一个判断设备来源的方法

   deviceType()
    window.addEventListener('resize', function(){
        deviceType()
    })

 function deviceType(){
        var ua = navigator.userAgent;
        var agent = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
        for(var i=0, i<agent.length; i++){
            if(ua.indexOf(agent[i])>0){
                alert(agent[i])
                break
            }
        }
    }
let ua = navigator.userAgent;
  // 移动端
  isMobile: ("ontouchstart" in window || navigator.msMaxTouchPoints) ? true : false,
  // 微信
  isWechat: /micromessenger/gi.test(ua),
  // qq
  isQQ: /qq/gi.test(ua),
  // VV音乐
  isvvmusic: /vvmusic/gi.test(ua),
  // 安卓
  isAndroid: /android/gi.test(ua),
  // iOS
  isIOS: /iphone|ipad|ipod|itouch/gi.test(ua), // IOS

其实想说的只有判断移动端,有时候ua并不正确。所以我们会使用一些移动端的 api 来判断是不是移动端。

根据navigator.userAgent 来判断 属性不记得了

const UA = window.navigator.userAgent.toLowerCase();
“正则”.test(UA)

根据window.navigator.userAgent来判断

/**

  • 写一个判断设备来源的方法
  • 主要思路: 利用 navigator.userAgent 进行判断
  • 对于主流的移动端 可以用 "Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod" 字段进行判断。
    */

const checkPlatform = () => {
const { navigator: { userAgent = "" } = {} } = window;
if (userAgent) {
console.log(userAgent);
const platforms = [
"Android",
"iPhone",
"SymbianOS",
"Windows Phone",
"iPad",
"iPod"
].map(item => item.toLowerCase());
const agentInfo = userAgent.toLowerCase();
const platform = platforms.find(agent => agentInfo.indexOf(agent) > -1);

return {
  platform: platform || "pc"
};

}

return { platform: "unknown" };
};

一般都用这个人家集成好的https://github.com/matthewhudson/current-device

    const { navigator: { userAgent = '' } = {} } = window
    if (userAgent) {
      const platforms = [
        "Android",
        "iPhone",
        "SymbianOS",
        "Windows Phone",
        "iPad",
        "iPod"
      ].map(item => item.toLowerCase())
      console.log(platforms.find(item => userAgent.toLowerCase().indexOf(item) > -1))
    }

看了楼上老哥的,自己敲了一遍

function checkPlatform() {
    let userAgentInfo = navigator.userAgent;
    const Agents = ['Android', 'iPhone', 'SysbianOS', 'Windows Phone', 'iPad', 'iPod'];

    for (let i = 0; i < Agents.length; i++) {
        if (userAgentInfo.indexOf(Agents[i]) > 0) {
            return alert('当前为移动端设备,机型为:' + Agents[i]);
        }
    }
    return alert('当前为PC端');
}

checkPlatform();

const UA = window.navigator.userAgent.toLowerCase();

commented

通过ua、加上不同端特有的方法来判断

通过window.navigator.userAgent来判断

在JavaScript中,可以通过 navigator.userAgent 属性来获取用户代理字符串,从而判断设备的来源。用户代理字符串包含了关于浏览器和设备的信息。

以下是一个示例方法,用于判断设备来源:

function getDeviceSource() {
  const userAgent = navigator.userAgent.toLowerCase();
  
  if (userAgent.includes("android")) {
    return "Android";
  } else if (userAgent.includes("iphone") || userAgent.includes("ipad") || userAgent.includes("ipod")) {
    return "iOS";
  } else if (userAgent.includes("windows phone")) {
    return "Windows Phone";
  } else if (userAgent.includes("macintosh") || userAgent.includes("mac os x")) {
    return "Mac";
  } else if (userAgent.includes("windows")) {
    return "Windows";
  } else {
    return "Unknown";
  }
}

// 示例用法
const deviceSource = getDeviceSource();
console.log(deviceSource); // 输出设备来源

在上面的示例中, getDeviceSource 函数通过检查 navigator.userAgent 中的关键字,判断设备来源。它会检查包含 "android"、"iphone"、"ipad"、"ipod"、"windows phone"、"macintosh" 和 "windows" 的关键字,并返回相应的设备来源。如果无法识别设备来源,则返回 "Unknown"。

需要注意的是,用户代理字符串可以被伪造或修改,因此这种判断方式并不是绝对可靠的。在实际应用中,应该结合其他方法和技术来进行设备来源的判断。