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

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


当前回答

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

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

它不需要jQuery。

其他回答

如果发现仅检查navigator.userAgent并不总是可靠的。还可以通过检查navigator.platform来实现更高的可靠性。对先前答案的简单修改似乎效果更好:

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||
   (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {
    // some code...
}

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

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

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

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

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

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

我建议使用以下字符串组合,以检查是否使用了设备类型。

根据Mozilla文档字符串,建议使用Mobi。但是,如果只使用Mobi,一些旧的平板电脑不会返回真值,因此我们也应该使用Tablet字符串。

同样,为了安全起见,iPad和iPhone字符串也可以用来检查设备类型。

大多数新设备将仅对Mobi字符串返回true。

if (/Mobi|Tablet|iPad|iPhone/.test(navigator.userAgent)) {
    // do something
}

我使用这个解决方案,它在所有设备上都很好:

if (typeof window.orientation !== "undefined" || navigator.userAgent.indexOf('IEMobile') !== -1) {
   //is_mobile
}

你会做太多的工作。

if (window.screen.availWidth <= 425) {
   // do something
}

您可以通过JS在页面加载时执行此操作。无需编写长字符串列表来尝试捕获所有内容。哇,你错过了一个!然后你必须回去改变它/添加它。更流行的手机尺寸约为425英寸或更小(在纵向模式下),平板电脑约为700英寸,任何更大的都可能是笔记本电脑、台式机或其他更大的设备。如果你需要移动风景模式,也许你应该在Swift或Android工作室工作,而不是传统的网络编码。

附带说明:发布时,这可能不是一个可用的解决方案,但现在可以使用了。