使用 JS 检测 MacOS、iOS、Windows、Android 和 Linux 操作系统 [重复]

2023-12-21

如何使用 JavaScript 检测 MacOS X、iOS、Windows、Android 和 Linux 操作系统?


我学到了很多关于window.navigator对象及其属性:platform, appVersion and userAgent。在我看来,几乎不可能 100% 确定地检测用户的操作系统,但就我而言,85%-90% 对我来说就足够了。

因此,在检查了大量 Stack Overflow 答案和一些文章后,我写了这样的内容:

function getOS() {
  const userAgent = window.navigator.userAgent,
      platform = window.navigator?.userAgentData?.platform || window.navigator.platform,
      macosPlatforms = ['macOS', 'Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
      windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
      iosPlatforms = ['iPhone', 'iPad', 'iPod'];
  let os = null;

  if (macosPlatforms.indexOf(platform) !== -1) {
    os = 'Mac OS';
  } else if (iosPlatforms.indexOf(platform) !== -1) {
    os = 'iOS';
  } else if (windowsPlatforms.indexOf(platform) !== -1) {
    os = 'Windows';
  } else if (/Android/.test(userAgent)) {
    os = 'Android';
  } else if (/Linux/.test(platform)) {
    os = 'Linux';
  }

  return os;
}

alert(getOS());

灵感:

  1. 截至今天, navigator.platform 的可能值列表是什么? https://stackoverflow.com/questions/19877924/what-is-the-list-of-possible-values-for-navigator-platform-as-of-today
  2. 使用 JavaScript 或 jQuery 检测 Mac OS X 或 Windows 计算机的最佳方法 https://stackoverflow.com/questions/10527983/best-way-to-detect-mac-os-x-or-windows-computers-with-javascript-or-jquery
  3. 如何使用 JavaScript 检测我的浏览器版本和操作系统? https://stackoverflow.com/questions/11219582/how-to-detect-my-browser-version-and-operating-system-using-javascript
  4. 如何使用 javaScript 检测浏览器和操作系统名称和版本 http://code2care.org/pages/detect-browser-and-operating-system-name-and-version-using-javascript/

我还使用移动和桌面浏览器列表来测试我的代码:

  1. 所有移动浏览器的列表 http://www.useragentstring.com/pages/Mobile%20Browserlist/
  2. 所有浏览器列表 http://www.useragentstring.com/pages/Browserlist/

这段代码可以正常工作。我在所有操作系统上进行了测试:MacOS、iOS、Android、Windows 和 UNIX,但我不能保证 100% 确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JS 检测 MacOS、iOS、Windows、Android 和 Linux 操作系统 [重复] 的相关文章

随机推荐

  • 类型 存在于“A”和“B”中

    现在我知道这里已经有很多这样的问题 但是在翻阅它们之后 我还没有找到可以解决我的具体问题的问题 我有一个 ASP NET MVC 4 5 项目 我使用 NuGet 并将 Newtonsoft Json 添加到项目中 一旦我在代码中使用它 以
  • 创建粘性导航 CSS 和 jquery

    我目前正在为一个网站开发粘性导航 当导航变成时 我遇到了一些问题position fixed它似乎在跳跃 看起来 笨重 这是我想做的事情的小提琴 http jsfiddle net DKtLR http jsfiddle net DKtLR
  • 如何在 TypeScript 中使用 ES6 模块语法导入 angular.IInjectorService

    如何从 Angular IInjectorService 导入角度 d ts https github com borisyankov DefinitelyTyped blob master angularjs angular d ts使用
  • SQL - 对于 b 列中的每个值,a 列上的不同值

    我正在使用一张名为du vertrag 我正在尝试构建一个查询来选择不同的值id and status pairs 输入表 id status date 6251899 beantragt 20201008 6377042 beantrag
  • 使用 C# 解压缩 .gz 文件

    我有一个名为ZippedXmls tar gz 的焦油gunzip 文件 其中有2 个xml 我需要以编程方式解压缩该文件 输出应该是复制到文件夹中的 2 个 xml 如何使用 C 实现此目的 我使用过 Net的内置压缩流 http msd
  • Boost asio 发送和接收消息

    我正在尝试使用 TCP 从客户端和服务器发送和接收消息 我正在尝试使用线程 但我根本不知道该怎么做 我可以很好地连接到服务器 但我需要能够按需从两个地方发送和接收消息 我已经搜索了几个小时但一无所获 因为谷歌上的所有结果都过于复杂和混乱 s
  • 在 Audit.Net 中,有没有办法使用多个输出提供程序?

    我尝试设置下面的配置 但我认为只使用了其中之一 有没有办法将两者链接起来 或者有其他方法可以使用多个输出提供程序 Audit Core Configuration Setup UseElasticsearch config gt confi
  • 如何在 ubuntu 上重新安装 cassandra?

    我是 Ubutu linux Cassandra 的新手 我在我的 ubuntu 机器上使用 OpenJdk 测试了 Cassandra 有一些不错的文章解释了如何在 ubuntu 上安装 Cassandra 所以我可以这样做 我更改了一些
  • Git 中的文件级跟踪(同一目录中多个分支的文件)

    是否有任何脚本可以让人们记住某个目录中文件的单独分支 提交 以便可以同时处理同一目录中的分支 1 上的文件 1 和分支 2 上的文件 2 并让它们正确提交 如果没有我会自己实现 我的计划是为各种分支 存储库设置隐藏的签出目录 并使用这些文件
  • UITableView 中的实时搜索

    我已经实施了一个UI搜索栏用于查找其中的元素UI表格视图 一切似乎都工作正常 现在我需要对按下的每个键进行实时搜索文本域 并通过每按一次按钮来缩小搜索范围 因此 在开始编码之前 我想知道是否有任何内置库函数可以帮助我进行实时搜索 字符串比较
  • 对点进行排序,使连续点之间的最小欧氏距离最大化

    给定 3D 笛卡尔空间中的一组点 我正在寻找一种算法来对这些点进行排序 使得minimal两个连续点之间的欧几里得距离将最大化 如果算法倾向于最大化average连续点之间的欧氏距离 Edit 我已经交叉发布了https cstheory
  • 如何在 Fauna DB 中创建索引以返回键值对中的排序数据

    我正在尝试创建一个索引 该索引返回带有键的对象中的排序数据 我的集合的默认索引返回如下内容 ref Ref Collection posts 251333584234742292 ts 1583632773120000 data title
  • 如何在 Objective-C 中定义和使用 ENUM?

    我在实现文件中声明了一个枚举 如下所示 并在接口中声明了该类型的变量作为 PlayerState thePlayerState 并在我的方法中使用了该变量 但我收到错误消息 指出它未声明 如何在我的方法中正确声明和使用 PlayerStat
  • java.nio.file 的替代方案

    我在这个项目中使用 Android Studio 2 3 1 和 jdk 1 8 我导入一个项目 它使用 java nio file Files 和 java nio file Paths Java 8 中不存在包 java nio fil
  • 如何使用 JHipster 和 Hibernate Envers

    我无法弄清楚如何使用 Hibernate Envers 和 JHipster 我使用 PostgreSQL 来存储数据 最新的 Jhipster 2 6 0 我刚刚生成了一个 JHipster 应用程序 没有任何修改 User 域类扩展了
  • shell whoami 不等于 php shell_exec whoami?

    在 shell 中 我执行简单的 whoami 操作 然后得到 geoff 这很好 因为这就是我 在 php 文件中 我有 shell exec whoami 我没有得到任何人 在我看来 这似乎是一个差异 可以解释我最初的问题 imagem
  • PHP从3个变量中获取最大的数字[重复]

    这个问题在这里已经有答案了 可能的重复 返回具有最高值的变量 https stackoverflow com questions 5737305 return variable with the highest value 我试图想出一种简
  • Rails - 如何“合并”或将值附加到 URL 内的数组?

    我正在尝试在 URL 中传递一个数组 该数组工作正常 但我想知道如何插入或删除某些值 例如 我有一个链接 如下所示 http localhost 3000 pins genre ids 1 2 3 我想构建一组可以在此 URL 数组中插入或
  • 在 ASP.NET 内部运行 ASP.NET MVC 时,会话为 NULL

    如果我创建一个 ASP NET Web 应用程序项目 然后使用像这样定义的默认路由向其添加 ASP NET MVC 2 routes MapRoute Default Route name controller action id URL
  • 使用 JS 检测 MacOS、iOS、Windows、Android 和 Linux 操作系统 [重复]

    这个问题在这里已经有答案了 如何使用 JavaScript 检测 MacOS X iOS Windows Android 和 Linux 操作系统 我学到了很多关于window navigator对象及其属性 platform appVer