10

为了使地图链接像以前一样打开地图应用程序,我想根据用户使用的是 iOS 6 还是其他(iOS 4、5、Android 等)显示不同的链接。

类似的东西: -- 如果在 iOS 6.0 或更高版本上,显示http://maps.apple.com?q= "address",如果其他,显示http://maps.google.com?q= "address"。

注意:我意识到您也可以直接调用地图应用程序,而不是通过网络链接(现在不方便),但这不能解决问题,因为 Android 或较小的 iOS 上的人将无法使用那。

4

4 回答 4

16

navigator.userAgent您可以使用该字符串检测 iOS 版本。就像是:

if(/(iPhone|iPad|iPod)\sOS\s6/.test(navigator.userAgent)) {
    // use apple maps
}

请注意,这绝不是未来的证明,用户代理字符串可以更改,操作系统也会更改。同样 AFAIK,通过浏览器的谷歌地图可在所有平台上使用,包括 iOS 6。

于 2012-11-08T00:05:23.357 回答
6

这里有一点 JS 来确定 iOS 和 Android OS 版本。不需要 jQuery。

使用 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(/iPod/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 ) { ... }
于 2012-11-25T08:08:30.937 回答
2

您想查看用户代理字符串。Safari 网络浏览器有一种方法可以报告正在使用的设备(iPad、iPhone 等)以及版本号,因此它是那个紧凑的小字符串中信息的 indexOf 问题。

http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3

其他一些有用/非常相关的 Stackoverflow 问题:

使用 JavaScript 检测低于 5 的 iOS 版本

在网页上检测 iOS 版本

使用 PHP 或 Javascript 检查 iOS 版本是否为 3.0 或更高

于 2012-11-08T00:05:08.133 回答
1

使用 JavaScript 查看用户代理标头。

navigator.userAgent
于 2012-11-08T00:06:47.007 回答