在网页上检测iOS版本

7

有没有办法(使用Javascript、PHP等)在MobileSafari上访问页面时检测iOS页面的版本?


浏览器嗅探是一种有缺陷的策略。如果您说出为什么需要知道这个,您将得到帮助克服问题。 - RobG
7个回答

8

这里有一段JS代码,用于确定iOS和Android操作系统的版本。

已经使用实际的用户代理字符串测试了iOS 4.3到6.0.1和Android 2.3.4到4.2的版本。

var userOS;    // will either be iOS, Android or unknown
var userOSver; // this is a string, use Number(userOSver) to convert

function getOS( )
{
  var ua = navigator.userAgent;
  var uaindex;

  // determine OS
  if ( ua.match(/iPad/i) || ua.match(/iPhone/i) )
  {
    userOS = 'iOS';
    uaindex = ua.indexOf( 'OS ' );
  }
  else if ( ua.match(/Android/i) )
  {
    userOS = 'Android';
    uaindex = ua.indexOf( 'Android ' );
  }
  else
  {
    userOS = 'unknown';
  }

  // determine version
  if ( userOS === 'iOS'  &&  uaindex > -1 )
  {
    userOSver = ua.substr( uaindex + 3, 3 ).replace( '_', '.' );
  }
  else if ( userOS === 'Android'  &&  uaindex > -1 )
  {
    userOSver = ua.substr( uaindex + 8, 3 );
  }
  else
  {
    userOSver = 'unknown';
  }
}

如果要检测特定版本及更高版本,请尝试:

if ( userOS === 'iOS' && Number( userOSver.charAt(0) ) >= 5 ) { ... }

1
谢谢,这有助于检测IOS版本。做了一些更改以允许更长的版本字符串,如8_1_1(子字符串调用和替换所有下划线为点号:checkIfiOS8: function() { if((/iphone|ipod|ipad/gi).test(navigator.platform)) { var versionString = navigator.appVersion.substr(navigator.appVersion.indexOf(' OS ')+4); versionString = versionString.substr(0, versionString.indexOf(' ')); versionString = versionString.replace(/_/g, '.'); return true; } return false; } - klogd

4

你应该能够解析UserAgent字符串。

这是一个声明操作系统为4.3.1的示例User Agent字符串。

Mozilla/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5

1

0
在Javascript中,你可以这样做:

function isIos() {
  const userAgent = window.navigator.userAgent.toLowerCase();
  return /iphone|ipad|ipod/.test(userAgent);
}

function getIphoneOSVersion() {
  let osVersion: any = 'Unknown';

  if (!isIos()) {
    return osVersion;
  }

  osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(window.navigator.userAgent);
  osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
  osVersion = osVersion.replaceAll('_', '.');
  return osVersion;
}


0

0

你需要在PHP中(或JavaScript中的等效方式)询问$_SERVER['HTTP_USER_AGENT']值并解析它。我会建立一个帮助方法来解析和解码用户代理,并返回访问您的站点/应用程序的iOS设备和版本。

你需要的参考资料可以在苹果公司的网站上找到。请查看“使用Safari用户代理字符串”部分。


0

你不仅应该检测设备是否为iOS设备,还应该检测设备是否运行至少iOS 2.0。因为自从2.0版本以来,支持多点触控和其他重要功能。特性的参考可以在维基百科上找到。


3
真的吗?目前有多少1.0版本的用户在使用呢? - lxt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接