【发布时间】:2013-05-08 15:29:15
【问题描述】:
我目前在我的网站上使用 JavaScript 进行移动设备检测,这样我就可以为移动或桌面用户提供不同的内容。
目前我使用window.devicePixelRatio 和screen.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 does not work in IE 10 Mobile?
我已经对其进行了测试,它可以在 Firefox 中运行,并解决了我的问题,但不幸的是,现在在 Chrome 中出现了问题,所以:
Chrome zoom = 100%,
window.devicePixelRatio = 1.0,
window.screen.availWidth / document.documentElement.clientWidth = 3.0
我似乎找不到适用于所有情况的可靠解决方案。
【问题讨论】:
-
您不应该使用设备像素比来检查移动设备:一些非移动设备是“视网膜”(iPad、mac book pro...)并且会显示移动设备样式。仅用于高清图像。
-
@Yukulélé 我明白你的担忧。这就是为什么我将
screen.width除以window.devicePixelRatio然后检查其结果是否小于768px(iPad 的宽度)。这样做会阻止大多数平板设备看到移动风格。尽管像 Kindle Fire 这样的平板设备确实展示了移动风格,因为它们是较小的平板电脑。我不认为这是一个问题,因为这些设备的移动样式显示得很好。
标签: javascript mobile device-detection pixel-ratio