iOS 7上Safari浏览器的用户代理

14

我希望我的网站只能在iPhone和iPod上的Safari浏览器中打开。对于Chrome、Dolphin等其他浏览器,它不应该被打开。

但是目前几乎所有的设备都会返回相同的用户代理:

对于Safari:

User Agent String :: mozilla/5.0 (iphone; cpu iphone os 7_0_2 like mac os x) applewebkit/537.51.1 (khtml, like gecko) version/7.0 mobile/11a501 safari/9537.53

对于Chrome浏览器:

User Agent String :: mozilla/5.0 (iphone; cpu iphone os 7_0_2 like mac os x) applewebkit/537.51.1 (khtml, like gecko) crios/30.0.1599.16 mobile/11a501 safari/8536.25

对于 Mercury 浏览器:

User Agent String :: mozilla/5.0 (iphone; cpu iphone os 6_0_1 like mac os x) applewebkit/536.26 (khtml, like gecko) mercury/7.4.2 mobile/10a523 safari/8536.25

对于Dolphin浏览器:

User Agent String :: mozilla/5.0 (iphone; cpu iphone os 7_0_2 like mac os x) applewebkit/537.51.1 (khtml, like gecko) version/6.0 mobile/10a523 safari/8536.25

在Chrome中,我可以通过检查crios来判断,Mercury浏览器则是通过mercury字符串判断,但其他一些浏览器似乎与Safari的用户代理相同,那么这些浏览器该如何判断呢?


是啊,这真让人沮丧。我也遇到了同样的问题。 - Aero Wang
3个回答

29

other的答案并不完全正确。在iOS上,苹果会阻止任何竞争浏览器实际上包含自己的渲染引擎;所有浏览器都必须使用标准的Webview。

因此,所有这些第三方浏览器(具有同步收藏夹等功能)只是围绕着Safari驱动的Webview的包装器,实际上渲染页面,因此它们都具有Safari的用户代理字符串。


1
这并不完全正确。如果我们在 iPhone 上比较 Safari 使用的用户代理和 uiwebview/wkwebview 的用户代理,它们并不匹配。请参考此 SO 问题的第一个答案:https://dev59.com/y3I95IYBdhLWcg3wzhV9 - shrutim
用户代理的最后一部分将根据特定的浏览器(Safari、UIWebView、Dolphin等)而改变,但指示浏览器平台的主要部分将保持不变。(请参见https://en.wikipedia.org/wiki/User_agent#Format_for_human-operated_web_browsers) - Andy Nugent
我同意。但是如果用户代理字符串中没有Safari部分,许多网站会表现不良。一些在Safari iOS上显示良好的网站,在UIWebView或WKWEbview上会出现问题。例如:http://m.gasbuddy.com。我不得不更新WKWebview的用户代理字符串,以便网页呈现与IOS上的Safari完全相同。我的意思是,当我们说Safari和iOS上使用的所有移动Web视图的用户代理是相同的时,我们应该小心,因为有些网站的行为是不同的。 - shrutim

5
浏览器故意这样做是为了防止人们做你试图做的事情。他们的开发者认为,由于他们使用同一种网络引擎(WebKit、blink或Gecko),所以他们很可能会很好地呈现针对类似浏览器优化的页面(这很可能是正确的)。因此,最有可能无法确定。

0

解决了对于水银、欧朋、谷歌浏览器和火狐浏览器的问题,但不能在海豚浏览器上运行。

(
  (/(iPad|iPhone|iPod)/gi).test(userAgent) &&
  !(/CriOS/).test(userAgent) &&
  !(/FxiOS/).test(userAgent) &&
  !(/OPiOS/).test(userAgent) &&
  !(/mercury/).test(userAgent)
)

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