【发布时间】:2013-02-07 03:06:57
【问题描述】:
我想要一个使用相同 HTML 的单个站点,但以最适合它所服务的平台的方式“小部件化”它。
是否有标准做法来检测客户端上的移动设备/硬件键盘并决定是否加载 jQuery Mobile 以及网站的移动 JavaScript 或 jQuery UI 以及桌面体验脚本?
以下似乎是一种合理的方法,但我想知道 Modernizr.touch 是否是检测这一点的最佳方法?例如:强制触摸可能不是 Surface 的最佳解决方案。有没有办法检测是否还有硬件键盘?
Modernizr.load({
test: Modernizr.touch,
yep : ['jquery-mobile.js','mobile.js']
nope: ['jquery-ui.js','desktop.js']
});
编辑:
发现了一些相关的 Modernizr 错误:
- Modernizr.touch detects touch events not touch devices
- IE10 "metro" is not detected as a touch capable device
我想我真正需要的是一种检测设备是否能够触摸以及是否具有硬件键盘的方法。我可以使用David Mulder's answer for detecting device width in physical units (inches) 作为代理,并假设任何大于 11 英寸的东西都有键盘,但我敢打赌那里有一个巨大的平板电脑(或者谷歌将发布一个 nexus 12 平板电脑:),这会做出错误的假设。
【问题讨论】:
-
我对 Modernizr 了解不多,但我认为标准方法是检查屏幕宽度,以便为较小的设备提供特殊的 js 和 css。
-
@Joshua,但屏幕宽度可能不可靠。如果我也想将其扩展为具有平板电脑模式,那么我将如何区分桌面上的窄窗口和平板电脑之间的区别?有一个媒体查询可以可靠地检测手机/平板电脑我可以使用它:bricss.net/post/22198838298/… 虽然我发现它有点慢,而且它不适用于 IE9
-
那里有很多移动设备,even the most popular ones have highly variable screen widths。检测触摸事件不是处理事情的正确方法。标准做法是根据屏幕宽度提供不同的响应式布局。
-
问题在于,智能手机、平板电脑和台式机之间不再有任何明确的区分方法。 MS Surface 和 Asus Transformer 都是平板电脑和台式机; Kindle 或 Galaxy Note 介于智能手机和平板电脑之间。没有有意义的方法来区分这三个类别。您需要确定您真正想要区分的是什么,然后对其进行衡量。
标签: javascript jquery-ui jquery-mobile mobile modernizr