JavaScript如何准确识别iPhone设备上的Chrome等第三方浏览器
iPhone端Chrome浏览器准确识别方案
原有代码检测失效是因为iOS平台限制所有第三方浏览器必须使用WebKit内核,默认UA会携带Safari相关字段,但Chrome等第三方浏览器都会在UA中追加自身专属标识,优先匹配这些标识即可准确识别,不存在技术障碍。
Chrome for iOS在UA中追加的专属标识为CriOS,将UA转为小写后匹配crios字段,即可判定当前为iOS端Chrome环境。
修正后的完整检测代码
var browser = (function (agent) { switch (true) { case agent.indexOf("edge") > -1: return "MS Edge (EdgeHtml)"; case agent.indexOf("edg/") > -1: return "MS Edge Chromium"; // iOS端第三方浏览器专属标识,需放在Safari判断前优先匹配 case agent.indexOf("edgios") > -1: return "MS Edge (iOS)"; case agent.indexOf("fxios") > -1: return "Firefox (iOS)"; case agent.indexOf("oprios") > -1 && !!window.opr: return "Opera (iOS)"; case agent.indexOf("crios") > -1 && !!window.chrome: return "Chrome (iOS)"; case agent.indexOf("opr") > -1 && !!window.opr: return "Opera"; case agent.indexOf("chrome") > -1 && !!window.chrome: return "Chrome"; case agent.indexOf("trident") > -1: return "Internet Explorer"; case agent.indexOf("firefox") > -1: return "Firefox"; case agent.indexOf("safari") > -1: return "Safari"; default: return "other"; } })(window.navigator.userAgent.toLowerCase());
关键注意点
- 匹配顺序优先级:iOS端第三方浏览器的专属标识判断,必须放在通用Safari判断逻辑之前,否则会被提前命中Safari分支导致误判
- 内核特征无法区分iOS端浏览器:所有iOS第三方浏览器都使用和Safari相同的WebKit内核,仅靠内核相关API无法区分具体浏览器产品
- 极端场景容错:如果用户手动修改UA、或者使用特殊的隐私浏览模式篡改了浏览器标识,任何基于UA的检测方案都无法保证100%准确,这类场景没有通用的完美解决方案
内容的提问来源于stack exchange,提问作者user3826764
相关产品推荐
相关产品推荐

