使用Modernizr,检测移动设备的最可靠方式是什么?

3
我正在开发一个响应式网站,被要求在用户使用移动设备浏览时将网站上的任何免费电话号码替换为座机号码。使用Modernizr库(或任何其他库)检测用户是否在移动设备上,最可靠的方法是什么?
我知道Modernizr.touch和Modernizr.geolocation。当两者结合在if(Modernizr.touch && Modernizr.geolocation)语句中时,它们是判断您是否在移动设备上的良好指标,但iPad会使这两个属性都为真。我不愿意测试设备尺寸,因为移动设备越来越大!
有人之前解决过这个问题吗?

严格来说,你不能确定。特别是因为公司每个月都会推出大约一百万款新手机型号,所以用户代理字符串也存在问题。(很多人会把iPad称为移动设备 :-)) - Pointy
我认为Modernizr试图明确地阻止这种嗅探,所以他们可能没有实现一种方法。然而,我可以看出在你的情况下你有一个理由,所以最好的选择可能是使用navigator.userAgent - Robin Winslow
啊,我认为特征检测方法可能是使用这个:https://dev59.com/C2435IYBdhLWcg3w0TlP - Robin Winslow
@Pointy 你说得对,iPad可能是一种移动设备。我不想让iPad通过测试的原因是因为你不太可能从它上面打电话。用户更有可能坐在家里,他们会想看到免费电话号码,以便在手机上拨打。 - punkrockbuddyholly
现在,在许多桌面浏览器中,地理定位功能已经可用。他们提供了一个测试套件的链接,您可以在其中查看选项是否被打开或关闭。(http://modernizr.github.io/Modernizr/test/index.html) 我在我的Mac Mini上检查了Safari、Chrome、Firefox和Opera浏览器,它们全部都将地理定位设置为true。 - Pamela Cook - LightBe Corp
3个回答

3
通过使用Modernizr API方法 Modernizr.mq(str) 例子:
Modernizr.mq('only all and (max-width: 400px)')

2
谢谢。像我说的,我不愿意使用尺寸,因为它们无法可靠地检测移动设备,但我可能不得不这样做。 - punkrockbuddyholly
6
我的手机横过来后显示宽度为640像素 :-) - Pointy

2
我在我的网站上使用这个PHP库:http://code.google.com/p/php-mobile-detect/ 我推荐使用它而不是JavaScript库,因为这意味着移动设备上需要处理的内容更少,你的网页代码也更加简洁,无需针对超过一个设备进行条件语句。不过需要注意的是,你需要维护两个版本的网站。但是相对于维护有条件语句的网页来说,我认为这不是问题。我在根目录下有一个桌面文件夹和一个移动文件夹。
我只是简单地使用isMobile方法并忽略大部分其余内容,但如果你想要的话,可以用它来过滤并针对特定设备类型进行操作。
例如用法:
 // Include the mobile detection file.
 require('Mobile_Detect.php');

 // Create new mobile detect object.
 $detect = new Mobile_Detect();
 // Create new browser object
 $browser = new Browser();
 // Check if the client is using a mobile device.
 $mobile = $detect->isMobile();

 ...

 if($mobile) {
     //Load mobile site version
     require('Mobile\\index.html');
 } else {
     //Load desktop site version
     require('Desktop\\index.html');
 }

如果您只想更改数字,那么JavaScript可能是更好的解决方案。但是,如果您想开发整个移动友好的网站,则本答案可能更加适合。


谢谢。不幸的是,我正在为一个.asp网站开发前端。也许我可以与开发人员交谈,询问他们从后端可以做些什么。 - punkrockbuddyholly
如果您愿意的话,可以尝试使用ASP移动检测浏览器脚本,并将我的解决方案适应为ASP。可以在此处找到示例脚本:http://mobiforge.com/developing/story/lightweight-device-detection-asp(我没有使用过这个特定的脚本) - Ren
2
那个库看起来就像一堆(写得很糟糕的)模式,可以应用到用户代理上。 - Pointy
@Pointy 正如我所说,我之前的评论中没有使用过该脚本的经验。然而,我提供的 PHP 库会执行类似的操作,它会检测报告的用户代理中是否包含某些特定的字符串,并且可以从中确定是否为移动浏览器。(请记住,用户代理可能会被欺骗)。在我看来,这比检查设备宽度要好。我在答案中提供的 PHP 库增加了很少的开销(执行时间小于 0.001 秒),所以我很乐意使用它。 - Ren
@Ren 这就是我所说的 PHP 库 :-) 通过修复一些愚蠢的正则表达式,你可能可以让它运行得更快。 - Pointy
@Pointy 我知道 :P 不过,我已经解释了我使用它的原因 :) 如果有时间,我可能会考虑对其进行优化。谢谢 - Ren

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接