javascript - 使用 JavaScript 检测非移动设备

标签 javascript windows mobile user-agent

在投票重复之前:

请阅读下面的完整问题。我在那里解释了为什么“如何检测移动设备?” 这里不是一个例子

问题(以及为什么这不是简单地否定移动开发检测):

有很多关于“如何使用 JavaScript 检测移动设备?”的问题(最好的问题之一,如果您正在寻找它: What is the best way to detect a mobile device in jQuery? ),但我想问有点不同:“如何使用 JavaScript 检测非移动设备?”

您可能会想,当我可以进行这样的移动检测时:

if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile
    |Opera Mini/i.test(navigator.userAgent)){

     alert('mobile');
}

我可以在 if 内的语句之前放置否定,这将检查非移动设备。 并非如此。

上面的代码检测移动设备的多个版本。对于所有无法识别的设备,我们无法 100% 确定它们不是移动设备。 如果 userAgent 包含键入文字之一(webOS、iPone 等),那么它肯定是移动设备。 如果没有,有两种方式:

  1. 这不是移动设备
  2. 这是我们未列出的移动设备(错误、外来设备、我们编写代码后发布的设备等)

因此,我不想否定移动设备的测试,而是想为非移动设备(Linux/Windows PC、Mac 等)编写测试。这样,如果结果为真,我将 100% 确定我处理的是非移动设备。在另一种情况下 - 它相当具有移动性,但这只是一个强有力的假设

所以基本上,只有当我 100% 确定它是非移动设备时我才会使用react,当我不确定时,我不想采取任何步骤(或者我假设它是移动设备)。

这个公式看起来怎么样?针对 Windows 进行测试是否安全(Windows Phone 或类似的东西也可以使用该文字?)? Mac、Linux PC 和其他电脑怎么样?

最佳答案

这取自here :

var BrowserDetect = function() {
    var nav = window.navigator,
    ua = window.navigator.userAgent.toLowerCase();
    // detect browsers (only the ones that have some kind of quirk we need to work around)
    if (ua.match(/ipad/i) !== null)
        return "iPod";
    if (ua.match(/iphone/i) !== null)
        return "iPhone";
    if (ua.match(/android/i) !== null)
        return "Android";
    if ((nav.appName.toLowerCase().indexOf("microsoft") != -1 || nav.appName.toLowerCase().match(/trident/gi) !== null))
        return "IE";
    if (ua.match(/chrome/gi) !== null)
        return "Chrome";
    if (ua.match(/firefox/gi) !== null)
        return "Firefox";
    if (ua.match(/webkit/gi) !== null)
        return "Webkit";
    if (ua.match(/gecko/gi) !== null)
        return "Gecko";
    if (ua.match(/opera/gi) !== null)
        return "Opera";
    //If any case miss we will return null
    return null;
};

它不是很优雅,但您可以根据自己的喜好添加/删除它。

第二个答案,虽然我知道您正在专门寻找非移动检测,但您也可以使用 http://detectmobilebrowsers.com/它具有几乎完整的移动设备检测(即使是不太受欢迎的设备)。

关于javascript - 使用 JavaScript 检测非移动设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717720/

相关文章:

php - 根据国家和运营商重定向移动用户

android - 从简单的 html5 + javascript 游戏创建 iOS 和 Android 应用程序?

android - 如何在我的 flutter 应用程序中显示图像?我在做什么不工作

javascript - 当前在 Angular 应用程序中没有初始化 firebase.app.App 实例

javascript - Flow 不喜欢这段代码,它有条件地访问一个对象的属性,只有当它存在时

javascript - 为什么我使用 jest-dom 时会报错 "TypeError: expect(...).not.toBeVisible is not a function"

regex - 如何使用 Windows PowerShell 正则表达式删除文件名末尾的一个或多个空格?

javascript - 无法在 jQuery $.get 函数中访问全局变量

C memcpy 在 Linux 和 Windows 上的行为不同

c# - 防止 Windows 工作站(桌面)在运行 WPF 程序时锁定