C# Android手机浏览器检测

C# Android手机浏览器检测,c#,javascript,android,.net,samsung-mobile,C#,Javascript,Android,.net,Samsung Mobile,我有一个web应用程序,手机用户可以在其中看到经过移动优化的网站。新的三星Galaxy SIII用户代理没有提供来自手机的请求的线索。检测手机的最佳实践是什么 我知道javascript功能检测(即modernizer),但我希望有更好的东西。以下是三星Galaxy SIII用户代理: Mozilla/5.0(X11;Linux x86_64)AppleWebKit/534.24(KHTML,类似Gecko)Chrome/11.0.696.34 Safari/534.24 编辑:SIII有两个可

我有一个web应用程序,手机用户可以在其中看到经过移动优化的网站。新的三星Galaxy SIII用户代理没有提供来自手机的请求的线索。检测手机的最佳实践是什么

我知道javascript功能检测(即modernizer),但我希望有更好的东西。以下是三星Galaxy SIII用户代理:

Mozilla/5.0(X11;Linux x86_64)AppleWebKit/534.24(KHTML,类似Gecko)Chrome/11.0.696.34 Safari/534.24

编辑:SIII有两个可能的用户代理。以上是“桌面”版本。有趣的东西。有关详细信息,请参阅下面的链接


看看这个用户代理,我不得不说,要将其与非手持设备区分开来是非常困难的

浏览器检测的问题在于,显然很容易调整用户代理字符串,因此您永远不会真正知道服务器告诉您的内容是否真实

在这种情况下,您有两种选择:

  • 你可以检查手机发送的每一个标题,也许可以看看是否有一个标题可以使它独一无二

  • 或者通过测试页面加载时间等找到一些解决方法。作为一个异想天开的例子,手持设备上的浏览器通常会比桌面设备上的浏览器呈现页面慢一点,因此在测试每个可能的移动设备后,使用:

-

您可以看到一个只有简单脚本的页面是否没有在理想的时间加载

你明白了

另外,试着转到这里,看看它是否能检测到你:

设计“桌面模式”用户代理时,当用户有意选择桌面模式时,web服务器不会提供移动/平板电脑界面-从用户身上删除该选择是一种可用性反模式

如果您绝对*必须*覆盖用户的选择,那么在JavaScript当前(2013年)中,如果以下所有条件都成立,则很可能是Android设备:

  • 'ontouchstart'在document.documentElement中
  • navigator.vendor===“谷歌公司”
  • /^Linux armv/.test(navigator.platform)
  • 但是,上述内容会对一些不太常见的浏览器设置产生误报和误报,例如,基于ARM的带触摸功能的ChromeBook,例如,可能是使用ARM处理器在Linux上运行的Chrome(尽管可能是Linux/ARM),例如,可能是其他浏览器Firefox/Opera等,例如不是基于触摸的Android设备(如电视),例如Chrome是否可以在带有ARM处理器的Windows RT上运行?e、 g.在英特尔上运行的Android。

    毕竟我必须检测“桌面视图”,这与Robocate的回答非常相似,这就是我用来检测“桌面视图”的方法。它并不完美,但似乎提供了避免误报的正确平衡:

    if(userAgent.indexOf('X11;Linux x86_64')!=-1
    &&document.documentElement中的“ontouchstart”
    &&/^Linux armv/.test(navigator.platform)
    &&_.isChrome){
    if((window.outerWidth<500&&window.outerHeight<800)| |(window.outerWidth<800&&window.outerHeight<500)){
    //做事。
    }
    
    }
    Patrick,感谢您的快速回复。android手机没有像苹果设备那样清晰地识别自己,这太糟糕了。detectmobilebrowsers.com看起来正是我想要的让我来看看try@SemanticZen,这里有一个带有
    检测器的移动浏览器
    准备就绪。这是jQuery 2012年7月插件版本。该小提琴版本为5,但请注意,以前的小提琴使用不同的版本。干杯arttronics,谢谢你的小提琴。当我在三星Galaxy SIII上使用提琴时,提琴会将其显示为手机。然而,当我将userAgent作为字符串放入测试时,它就不起作用了。这是一个问题,因为我需要测试不在我桌上的设备。解决我的小提琴问题的方法是,有时三星SIII看起来像手机,有时它不像。有时你会觉得自己像个疯子,有时你不会……哼,试试这个有Firebug Mini的游戏,还有一条你可以查看的console.log消息。您可能需要使用Firebug迷你清除按钮,以确保访问控制台选项卡。然后单击控制台中为特定设备动态填充的对象。这就是说,你会看到所有插件知道你的三星。
    if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
     // some code..
    }