有没有办法检测用户是否在jQuery中使用移动设备?类似于CSS@media属性?如果浏览器在手持设备上,我希望运行不同的脚本。

jQuery$.browser函数不是我想要的。


当前回答

Window.matchMedia()

Window接口的matchMedia()方法返回一个新的MediaQueryList对象,然后可用于确定文档匹配媒体查询字符串,并监视文档,以检测何时匹配(或停止匹配)该媒体查询用法说明您可以使用返回的媒体查询来执行这两项操作即时和事件驱动的检查,以查看文档是否匹配媒体查询。执行一次性、即时检查以查看文档匹配媒体查询,查看匹配属性的值,如果文档满足媒体查询的要求。如果您需要了解文档是否匹配媒体查询,您可以随时查看更改要传递到对象的事件。有一个很好的例子Window.devicePixelRatio上的文章。

let mql = window.matchMedia('(max-width: 767px)');

其他回答

navigator.userAgentData.mobile返回[true|false]

如果通过移动设备您了解可触摸设备,则可以通过检查触摸处理器的存在来确定:

let deviceType = (('ontouchstart' in window)
                 || (navigator.maxTouchPoints > 0)
                 || (navigator.msMaxTouchPoints > 0)
                 ) ? 'touchable' : 'desktop';

它不需要jQuery。

我为.NET应用程序执行此操作。

在共享的_Layout.cshtml页面中,我添加了这个。

@{
    var isMobileDevice = HttpContext.Current.Request.Browser.IsMobileDevice;
}

<html lang="en" class="@((isMobileDevice)?"ismobiledevice":"")">

然后检查站点中的任何页面(jQuery):

<script>
var isMobile = $('html').hasClass('ismobiledevice');
</script>

如果你不特别担心小显示器,你可以使用宽度/高度检测。这样,如果宽度小于一定大小,移动网站就会被抛出。这可能不是完美的方法,但对于多个设备来说,这可能是最容易检测到的。您可能需要为iPhone4(大分辨率)设置一个特定的分辨率。

MDN建议使用Navigator.maxTouchPoints检查可用的可触摸点。如果>0,则设备是可触摸的,很可能是手机或平板电脑。https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints