我认为你在平板电脑、手机或任何其他网络设备之间做了一个基本的任意区分。似乎屏幕的物理尺寸是你想要用来决定提供的内容的度量标准。
在这种情况下,建议基于用户代理在HTTP头中传递的值实现逻辑 ([mobiforge.com...]),并在信息不可用时优雅地降级提示用户。
你的逻辑可能会像这样:
更新:我的回答现在已经三年了。值得注意的是,支持响应式设计已经取得了显著进展,现在常见的做法是向所有设备提供相同的内容,并依靠CSS媒体查询以最有效的方式呈现站点在不同设备上的样式。
根据谷歌的建议:可在此找到(Greg也提到过),这是我之前在项目中使用的东西。
if (/mobile/i.test(navigator.userAgent) && !/ipad|tablet/i.test(navigator.userAgent)) {
console.log("it's a phone"); // your code here
}
如果您在使用媒体查询,理论上可以使用@media handheld,但实际支持几乎不存在。
最简单的识别高分辨率移动设备的方法是查看屏幕DPI和设备像素比(目前通过webkit / mozilla供应商特定标签)。
@media (-webkit-max-device-pixel-ratio: 2),
(max--moz-device-pixel-ratio: 2),
(min-resolution: 300dpi) {
...
}
编辑:使用JS来设置window.devicePixelRatio以实现上述效果。
这里有一篇很好的文章,提供了很多识别移动设备的想法。
http://davidbcalhoun.com/2010/using-mobile-specific-html-css-javascript
cordova plugin add uk.co.workingedge.phonegap.plugin.istablet
然后在您的代码中随处调用此函数:
window.isTablet
很遗憾,目前唯一可靠的区分移动设备和平板电脑的方法是通过用户代理字符串。
我还没有找到包含设备尺寸的用户代理。如果您尝试计算设备像素密度,几乎所有设备都不可避免地会得出96ppi的结果,无论是台式机还是手机。
在用户代理字符串中搜索iPad / iPod / iPhone,以检测任何苹果设备。这将告诉您是否拥有苹果的平板电脑或电话/ iPod。幸运的是,i-devices的口味要少得多,因此在它们之间进行区分也会更容易。
要识别Android设备,请在用户代理字符串中搜索“Android”。要确定它是平板电脑还是手机,则普通的Android浏览器和Chrome的用户代理将包含“Mobile Safari”,而平板电脑将仅包含“Safari”。Google推荐使用此方法:
针对移动站点的解决方案,我们的Android工程师建议在User-Agent字符串中特别检测“mobile”和“android”。
可以在此处找到更详细的说明:
http://googlewebmastercentral.blogspot.com/2011/03/mo-better-to-also-detect-mobile-user.html
当然,这并不是理想的情况,但看起来似乎是唯一可靠的手段。需要提醒的是,从查看一个大规模的用户代理字符串列表(接近一百个)中,我确实看到了一两个旧设备没有正确遵守“Mobile”与“Mobile Safari”的区分。我认为WURFL可能是值得一看的东西: http://wurfl.sourceforge.net/help_doc.php 它更加专业,因为它是一种服务器端解决方案,而不是简单地通过媒体查询(例如您自己的查询或使用Foundation CSS等框架)或纯JavaScript(adapt.js)来完成。
那么可以做到这样的事情:
$is_wireless = ($requestingDevice->getCapability('is_wireless_device') == 'true');
$is_smarttv = ($requestingDevice->getCapability('is_smarttv') == 'true');
$is_tablet = ($requestingDevice->getCapability('is_tablet') == 'true');
$is_phone = ($requestingDevice->getCapability('can_assign_phone_number') == 'true');
if (!$is_wireless) {
if ($is_smarttv) {
echo "This is a Smart TV";
} else {
echo "This is a Desktop Web Browser";
}
} else {
if ($is_tablet) {
echo "This is a Tablet";
} else if ($is_phone) {
echo "This is a Mobile Phone";
} else {
echo "This is a Mobile Device";
}
}
参考:http://wurfl.sourceforge.net/php_index.php
或者在Java中:
WURFLHolder wurfl = (WURFLHolder) getServletContext().getAttribute(WURFLHolder.class.getName());
WURFLManager manager = wurfl.getWURFLManager();
Device device = manager.getDeviceForRequest(request);
String x = device.getCapability("is_tablet"); //returns String, not boolean btw