问题 检测桌面与移动浏览器的可靠方法[重复]


可能重复:
在Javascript中进行浏览器检测的最佳方法是什么? 

我想基本上做以下(在JavaScript或PHP中):

if (desktop browser) {
     do x;
}
else {   // mobile browser
     do not do x;
}

众所周知,使用浏览器 不推荐检测方法。更好的解决方案是使用a 能力测试。我的问题是,随着移动浏览器变得更智能,功能与桌面版一样强大,从非桌面浏览器中过滤桌面的理想排他性能力检测是什么?

我认为撤销条件检查,即 if (mobile browser) {} else ... 可能会证明更有问题,对吧?


8591
2018-01-21 14:02


起源

你似乎错过了特征检测的重点。重点是检测您关心的功能,而不是移动/桌面功能。 - Quentin
谢谢你指出这一点,@ Quentin。希望这能澄清那些试图做同样事情的人。 - moey
有关: stackoverflow.com/q/11381673 - moey
@Quentin是的,是的,我们知道,功能检测更好,但如果有人特别想知道他们的用户是从移动设备访问,不是为了提供不同版本的网站,而是为了自定义用户体验呢? - BBagi
@RuralJuror - 自定义如何?整齐地适合小屏幕?使用媒体查询。支持触摸?通过触摸事件逐步增强。提供具体位置信息?为什么这只需要移动? - Quentin


答案:


从谷歌搜索到了什么 一个美丽的网站

var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

if(isMobile.any()){
    // Mobile!
} else {
    // Not mobile
}

我不认为特征检测是 办法 优于用户代理嗅探,这实际上很糟糕。但是,如果您正在检测功能以确定设备是否被视为移动设备,那么您将面临一系列新问题。

你不能检查 pixel-ratio 因为新的台式电脑很可能是“视网膜”或超级高清。你不能检查 device-orientation 因为它不再是手机独有的东西了。您无法检查(如果可以)陀螺仪,因为某些笔记本电脑可能会返回值。

构建适用于所有平台的网站,而不是试图将它们分开!


13
2018-01-21 14:18



我准备添加评论来检查 window.orientation 但显然正如你所指出的那样,移动设备不再是独家的。是主要是因为Windows 8? - moey
主要是,是的。但重点是,我们可能(并且几乎肯定会)很快就会有一个被定向感知设备充斥的市场。检测 移动 没有意义,应该被认为是不好的做法。 - Rémi Breton
@Remi在这里介绍的概念有不同的实现:评估 navigator.userAgent。我喜欢这样的提示,即检查过去特定于移动设备的内容,例如:很快,设备方向可能不再有效/有效。 - moey
从2015年2月18日开始,这仍然有用。谢谢@remi - breezy


我想你正在寻找 get_browser() 在PHP中的功能。

尝试通过在browscap.ini文件中查找浏览器的信息来确定用户浏览器的功能。


0
2018-01-21 14:14