Php 检测桌面与移动浏览器的可靠方法

Php 检测桌面与移动浏览器的可靠方法,php,javascript,cross-browser,browser-detection,Php,Javascript,Cross Browser,Browser Detection,可能重复: 我主要想做以下工作(使用JavaScript或PHP): 众所周知,使用浏览器。一个更好的解决方案是使用。我的问题是,随着移动浏览器变得越来越智能,与桌面版本一样强大,理想情况下,什么样的独家检测功能可以从非桌面浏览器中过滤桌面 我认为反转条件检查,即if(移动浏览器){}else…可能会证明问题更大,对吗?我认为您正在寻找php中的函数 通过在browscap.ini文件中查找浏览器信息,尝试确定用户浏览器的功能 一个小小的谷歌搜索出现了,来自: 我不认为特征检测比用户代理嗅探更

可能重复:

我主要想做以下工作(使用JavaScript或PHP):

众所周知,使用浏览器。一个更好的解决方案是使用。我的问题是,随着移动浏览器变得越来越智能,与桌面版本一样强大,理想情况下,什么样的独家检测功能可以从非桌面浏览器中过滤桌面


我认为反转条件检查,即
if(移动浏览器){}else…
可能会证明问题更大,对吗?

我认为您正在寻找php中的函数

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


一个小小的谷歌搜索出现了,来自:

我不认为特征检测比用户代理嗅探更可取,因为用户代理嗅探实际上很可怕。但是,如果你通过检测功能来确定该设备是否被视为移动设备,那么你将面临一系列全新的问题

你不能检查像素比率,因为新的台式电脑很可能是“视网膜”或超级高清。你不能检查设备方向,因为它不再是手机独有的东西。你不能检查陀螺仪(如果可以的话),因为有些笔记本电脑可能会返回值


建立在所有平台上工作的网站,而不尝试将它们分开

您似乎忽略了特征检测的要点。关键是检测你关心的功能,而不是它是否是移动/桌面。谢谢你指出这一点,@Quentin。希望这能澄清其他人的想法。相关:@Quentin是的,是的,我们知道,功能检测更好,但是如果有人特别想知道他们的用户是否通过移动设备访问,不是为了提供不同版本的网站,而是为了定制用户体验呢?@RuralJuror-如何定制?整齐地放进一个小屏幕?使用媒体查询。支持触摸?通过触摸事件逐步增强。提供特定位置的信息?为什么只需要移动设备?我正要添加一条评论,以对照
window.orientation
进行检查,但显然正如您所指出的,它不再是移动设备的专有功能。主要是因为Windows 8吗?主要是的。但问题是,我们可能(而且几乎肯定会)很快就会有一个市场充斥着方位感知设备。检测移动设备是毫无意义的,应该被视为不好的做法。对于@Remi:在这里提出的概念,有不同的实现方式来评估
navigator.userAgent
。我喜欢这样一个提醒,即检查过去特定于移动设备的东西,例如设备方向可能很快就不再有效了。这在2015年2月18日仍然有用。谢谢@remi
if (desktop browser) {
     do x;
}
else {   // mobile browser
     do not do x;
}
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
}