【问题标题】:Detect iOS5 within mobile Safari (javascript preferred)在移动 Safari 中检测 iOS5(首选 JavaScript)
【发布时间】:2011-10-18 23:32:04
【问题描述】:

iOS5 中引入的新固定定位损坏了我的 web 应用程序,我需要一种方法来检测 iOS5 用户。

如何检测 iOS5?什么是浏览器代理字符串?首选 JavaScript。谢谢!

【问题讨论】:

  • 网站应该从不使用浏览器代理字符串来确定行为。
  • 我已经为其他支持它的移动设备(例如android)指定了它,我使用javascript重新定位一些元素,使用触摸事件来复制iphone上的固定定位缺乏固定位置,所以现在ios5有位置固定,它似乎行为不正常。
  • @Kevin,我想你可能有点离题了。一般来说,我可以同意,但你如何在不检查用户代理的情况下完成这项工作?如果您无法提供可行的替代方案,则永远不是一个强词。
  • @Kevin,在移动世界中,浏览器检测在某种程度上是必要的……诺基亚不是黑莓 os5 设备也不是 iOS 设备。从好的方面来说,移动世界正越来越多地转向 webkit 平台。
  • 如果您需要根据浏览器支持的功能进行区分,请使用功能检测。查看用户代理字符串正是为什么用户代理字符串如此混乱以及为什么每个浏览器都谎报其真实情况的原因。

标签: javascript iphone ios mobile safari


【解决方案1】:

From the SO question: What is the iOS 5 user-agent string:

iPhone:

Mozilla/5.0(iPhone;CPU iPhone OS 5_0,如 Mac OS X)AppleWebKit/534.46(KHTML,如 Gecko)版本/5.1 Mobile/9A334 Safari/7534.48.3

iPad:

Mozilla/5.0(iPad;CPU OS 5_0,如 Mac OS X)AppleWebKit/534.46(KHTML,如 Gecko)版本/5.1 Mobile/9A334 Safari/7534.48.3

这是在 javascript 中测试 ios 5.x 的方法:

<script type="text/javascript">
    if (navigator.userAgent.match(/OS 5(_\d)+ like Mac OS X/i))
        // this helps detect minor versions such as 5_0_1
        document.write("You have iOS 5! Aren't you special!");
</script>

【讨论】:

  • 感谢用户代理字符串。
  • 我为 ios5 检测到的代理字符串返回了该版本的另一个修订号。所以 5_0_1 而不是 5_0 所以我不得不将其修改为 navigator.userAgent.match(/OS 5_\d_\d like Mac OS X/i)
  • 请注意:因为有时 iOS5 返回固定版本号,如 5_0 和有时子版本号 5_0_1,5_\d 或 5_\d_\d 在所有情况下都不能准确检测 iOS5。我建议:navigator.userAgent.match(/OS 5_.*\ like Mac OS X/i);
  • 我的看法:navigator.userAgent.match(/OS 5(_\d)+ like Mac OS X/i)
【解决方案2】:

我进一步开发了 chown 的答案,检查了任何 iOS5 设备,无论是 5 或 5.0.1 还是任何更高版本:

var ios5 = navigator.userAgent.match(/OS 5_[0-9_]+ like Mac OS X/i) != null;
if(ios5) {
    // Now you can do specific stuff for devices on any version of iOS5
}

【讨论】:

    【解决方案3】:

    您可能正在使用 Modernizr 并检测 Web Workers,因为它们在 iOS 5 之前不可用。您仍然需要排除 Android,因为 Android 2.0+ 已支持它们。这将为您提供与 iOS6 的前向兼容性,而您将无法使用已经提供的任何用户代理解析。

    【讨论】:

    • 此外,其他答案均不处理 5.0.x、5.1.x 等。
    【解决方案4】:

    您需要考虑“CPU OS 5_0”和“CPU iPhone OS 5_0”,粗糙和肮脏的正则表达式:

    <script type="text/javascript">
    if (navigator.userAgent.match(/(iPad|iPhone);.*CPU.*OS 5_\d/i))
    { 
       alert("On iOS 5")
    }
    else
    {
       alert("Not on iOS 5"); //could be either 4- or 6+
    }
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多