使用JavaScript检测非移动设备

时间:2014-11-03 15:46:13

标签: 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. 这是我们未列出的移动设备(错误,异国设备,我们编写代码后发布的设备等)。
  3. 因此,我想为非移动设备(Linux / Windows PC,Mac等)编写测试,而不是否定对移动设备的测试。这样,如果结果为真,我将100%确定我处理的是非移动设备。在另一种情况下 - 它是相当移动的,但它只是强烈的假设

    所以基本上,我只想在我100%确定它是非移动设备时做出反应,当我不确定时,我不想采取任何措施(或者我会假设它是移动设备)。

    那个公式怎么样?对Windows进行测试是安全的(Windows Phone或类似的东西也可以使用该文字吗?)?那么Mac,Linux PC和其他人呢?

1 个答案:

答案 0 :(得分:-1)

这取自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/几乎完整的移动设备检测(即使不太受欢迎)。