admin管理员组

文章数量:1196940

The new fixed positioning introduced in iOS5 corrupted my webapp and I need a way to detect iOS5 users.

How can I detect iOS5? What is the browser agent string? JavaScript preferred. Thanks!

The new fixed positioning introduced in iOS5 corrupted my webapp and I need a way to detect iOS5 users.

How can I detect iOS5? What is the browser agent string? JavaScript preferred. Thanks!

Share Improve this question edited Oct 18, 2011 at 23:39 jfriend00 707k103 gold badges1k silver badges1k bronze badges asked Oct 18, 2011 at 23:32 user969622user969622 4712 gold badges5 silver badges14 bronze badges 8
  • Sites should NEVER use browser agent strings to determine behavior. – Lily Ballard Commented Oct 18, 2011 at 23:33
  • I have it specified for other mobile devices that support it such as android, and I used javascript to reposition some elements using touch events to replicate fixed positioning on iphones lack of position fixed, so now that ios5 has position fixed it seems to not be behaving normally. – user969622 Commented Oct 18, 2011 at 23:36
  • 6 @Kevin, I think you might be a bit off base here. In general I can agree but how would you make this work without checking the user-agent? Never is a strong word if you can't provide a working alternative. – fancy Commented Oct 19, 2011 at 0:19
  • 3 @Kevin, in the mobile world, browser detection is somewhat of a necessity...a nokia is not a blackberry os5 device is not an iOS device. On the plus side, the mobile world is increasingly moving towards the webkit platform. – DA. Commented Oct 19, 2011 at 0:27
  • 1 If you need to differentiate based on what features the browser supports, use feature detection. Looking at user agent strings is precisely why the user agent string is such a mess and why every browser lies about what they really are. – Lily Ballard Commented Oct 19, 2011 at 1:17
 |  Show 3 more comments

4 Answers 4

Reset to default 15

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

iPhone:

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

iPad:

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

And here is way to test for ios 5.x in javascript:

<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>

I've developed chown's answer a bit further, with a check for any iOS5 device, be it 5 or 5.0.1 or any later versions:

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
}

You could be using Modernizr and detecting for Web Workers as they were not available prior to iOS 5. You need to still exclude Android as Android 2.0+ has supported them. This will give you forward compatibility with iOS6 which you aren't going to get with either of the user agent parses already provided.

You need to account for "CPU OS 5_0" and "CPU iPhone OS 5_0", rough and dirty regex:

<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>

本文标签: iphoneDetect iOS5 within mobile Safari (javascript preferred)Stack Overflow