我目前在我的网站上使用 JavaScript 进行移动设备检测,这样我就可以为移动或桌面用户提供不同的内容。
目前,我使用window.devicePixelRatio
andscreen.width
来确定用户是否在移动设备上,如下所示:
var isMobileScreenWidth = ((screen.width / window.devicePixelRatio) < 768)
768px
是我们定义移动或桌面的点,因此 767 及以下为移动,768 及以上为桌面。
这很好用,但是我最近遇到了 Firefox 的一个问题,当 Firefox 放大和缩小时,它会改变window.devicePixelRatio
,所以:
zoom = 30%, window.devicePixelRatio = 0.3
zoom = 100%, window.devicePixelRatio = 1.0
zoom = 300%, window.devicePixelRatio = 3.0
这现在给我带来了一个问题,因为任何在 Firefox 上放大浏览器的用户都会获得该网站的移动版本。
我想知道是否有人知道获得与桌面浏览器分开的像素密度的不同或更好的方法。
我也使用了少量的用户代理检测,但是因为跟上不断变化的移动用户代理列表是一项艰巨的工作,所以我不可能同时依赖屏幕分辨率和用户代理时间。
如果有人对此有任何想法并且可以提供帮助,那就太棒了。
更新:
我刚刚遇到这个:
window.screen.availWidth / document.documentElement.clientWidth
这篇文章中建议了这个快速的数学:
window.devicePixelRatio 在 IE 10 Mobile 中不起作用?
我已经对其进行了测试,它可以在 Firefox 中运行,并解决了我的问题,但不幸的是,现在在 Chrome 中出现了问题,所以:
Chrome zoom = 100%,
window.devicePixelRatio = 1.0,
window.screen.availWidth / document.documentElement.clientWidth = 3.0
我似乎找不到适用于所有事情的可靠解决方案。