Phát hiện iOS
Tôi không phải là người hâm mộ của Tác nhân người dùng đánh hơi, nhưng đây là cách bạn sẽ làm điều đó:
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
Một cách khác là dựa vào navigator.platform:
var iOS = navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
iOSsẽ là một trong hai truehoặcfalse
Tại sao không phải là MSStream
Microsoft đã chèn từ iPhone vào IE11 userAgentđể thử và đánh lừa Gmail bằng cách nào đó. Vì vậy, chúng ta cần loại trừ nó. Thông tin thêm về điều này ở đây và ở đây .  
Dưới đây là bản cập nhật của IE11 userAgent(Bản cập nhật Internet Explorer cho Windows Phone 8.1):
  Mozilla / 5.0 (Di động; Windows Phone 8.1; Android 4.0; ARM; Trident / 7.0; Touch; rv: 11.0; IEMobile / 11.0; Nokia; Lumia 930) như iPhone OS 7_0_3 Mac OS X AppleWebKit / 537 (KHTML, như Gecko) Safari di động / 537
Dễ dàng thêm nhiều thiết bị hơn mà không cần sử dụng Biểu thức thông thường:
function iOS() {
  var iDevices = [
    'iPad Simulator',
    'iPhone Simulator',
    'iPod Simulator',
    'iPad',
    'iPhone',
    'iPod'
  ];
  if (navigator.platform) {
    while (iDevices.length) {
      if (navigator.platform === iDevices.pop()){ return true; }
    }
  }
  return false;
}
iOS()sẽ là một trong hai truehoặcfalse
Lưu ý: Cả hai navigator.userAgentvà navigator.platformcó thể được làm giả bởi người dùng hoặc tiện ích mở rộng trình duyệt.
Phát hiện phiên bản iOS
Cách phổ biến nhất để phát hiện phiên bản iOS là phân tích cú pháp từ chuỗi Tác nhân người dùng . Nhưng cũng có suy luận phát hiện tính năng * ;  
Chúng tôi biết một thực tế history APIđã được giới thiệu trong iOS4 - matchMedia APItrong iOS5 - webAudio APItrong iOS6 - WebSpeech APItrong iOS7 và v.v.
Lưu ý: Đoạn mã sau không đáng tin cậy và sẽ bị hỏng nếu bất kỳ tính năng HTML5 nào bị phản đối trong phiên bản iOS mới hơn. Bạn đã được cảnh báo!
function iOSversion() {
  if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
    if (window.indexedDB) { return 'iOS 8 and up'; }
    if (window.SpeechSynthesisUtterance) { return 'iOS 7'; }
    if (window.webkitAudioContext) { return 'iOS 6'; }
    if (window.matchMedia) { return 'iOS 5'; }
    if (window.history && 'pushState' in window.history) { return 'iOS 4'; }
    return 'iOS 3 or earlier';
  }
  return 'Not an iOS device';
}