【问题标题】:What is the most reliable way to detect a mobile device using Modernizr?使用 Modernizr 检测移动设备的最可靠方法是什么?
【发布时间】:2012-08-31 05:10:08
【问题描述】:

我正在开发一个响应式网站,当用户在移动设备上浏览时,我被要求将我们网站上的任何免费电话号码交换为固定电话号码。使用 Modernizr 库(或任何其他库)检测用户是否在移动设备上最可靠的方法是什么?

我知道 Modernizr.touch 和 Modernizr.geolocation。当这两者结合在if(Modernizr.touch && Modernizr.geolocation) 声明中时,它们可以很好地指示您是否在移动设备上,但是 iPad 将使这两个属性都成立。我不愿意测试设备尺寸,因为移动设备越来越大!

以前有人解决过这个问题吗?

【问题讨论】:

  • 严格来说你无法确定。即使是用户代理字符串也是有问题的,尤其是因为公司每月推出大约一百万个新手机型号。 (无论如何,很多人都会将 iPad 称为移动设备 :-)
  • 我认为 Modernizr 试图明确阻止这种嗅探,所以他们可能没有实现方法。但是我可以看到,在你的情况下,你有一个理由,所以你最好的选择可能是使用navigator.userAgent。
  • 啊,我觉得特征检测方法可能是用这个:stackoverflow.com/questions/5196833/…
  • @Pointy 你是对的,iPad 可能是移动设备。我不希望 iPad 通过测试的原因是你不太可能从它那里打电话。用户更有可能坐在家里,他们希望看到免费电话号码,以便他们可以在手机上拨打它。
  • 现在地理定位在许多桌面浏览器中都是正确的。他们有一个测试套件的链接,您可以在其中查看选项是否已关闭/打开。 (modernizr.github.io/Modernizr/test/index.html) 我检查了我的 Mac Mini Safari、Chrome、Firefox 和 Opera。他们都将地理位置设置为 true。

标签: javascript modernizr browser-feature-detection


【解决方案1】:

通过使用 Modernizr API 方法Modernizr.mq(str)

示例:

Modernizr.mq('only all and (max-width: 400px)')

【讨论】:

  • 谢谢。就像我说的那样,我不愿意使用尺寸,因为它们无法可靠地检测移动设备,但我可能不得不这样做。
  • 我的手机侧身报告宽度为 640 像素 :-)
【解决方案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 站点。也许我可以和开发人员谈谈,问他们可以从后端做什么。
  • 好吧,如果您愿意,您可以尝试使用 ASP 移动检测浏览器脚本,并改用我的解决方案来使用 ASP。可以在此处找到示例脚本:mobiforge.com/developing/story/lightweight-device-detection-asp(尽管我没有使用此特定脚本的经验)
  • 那个库看起来只是一堆(写得不好)的模式,可以应用于用户代理。
  • @Pointy 正如我所说,我在之前的评论中没有使用该脚本的经验。但是,我链接的 PHP 库做了类似的事情,它测试报告的用户代理中的某些告诉字符串,并可以从中确定它是否是移动浏览器。 (请记住,用户代理可以被欺骗)。在我看来,这比检查设备宽度要好。我在答案中链接的 PHP 库增加了很少的开销(执行时间
【解决方案3】:

正在寻找类似的东西,刚试了一下,乍一看似乎很好用。

http://detectmobilebrowsers.com/

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2019-06-17
    • 1970-01-01
    • 2010-12-29
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多