如何通过编程区分Internet Explorer与IE模式运行的Edge浏览器?
区分纯IE浏览器与Edge IE模式的解决方案
JavaScript客户端检测方案
由于常规的document.documentMode、navigator.userAgent等属性在两种环境下完全一致,可通过Edge IE模式特有的浏览器API来区分:
核心思路
Edge基于Chromium内核,其IE模式下仍保留部分Edge专属的浏览器属性,而纯IE(包括IE11)无这些属性。最可靠的是检查navigator.userAgentData——这是Chromium系浏览器的标准属性,纯IE不存在该对象。
代码示例
// 判断是否处于Edge IE模式 function isEdgeIEMode() { // 检查userAgentData是否存在,且包含Microsoft Edge标识 if (navigator.userAgentData?.brands) { return navigator.userAgentData.brands.some(brand => brand.brand === 'Microsoft Edge'); } return false; } // 判断是否是纯IE浏览器 function isPureIE() { // 先排除Edge IE模式,再验证是否为IE环境 return !isEdgeIEMode() && !!window.document.documentMode; }
注意事项
- 该方法适用于Edge 80及以上版本的IE模式,更低版本的Edge可能不支持
userAgentData; - 若需兼容旧版Edge IE模式,可补充检查
window.external的专属方法,但稳定性略差。
VB.NET服务器端检测方案
服务器端可通过请求头的差异来区分,Edge IE模式会发送纯IE不会携带的专属请求头。
核心思路
Edge IE模式会自动添加X-MS-Edge-Mode请求头,值为IE;同时Chromium系浏览器的Sec-CH-UA头也会包含Microsoft Edge的标识,纯IE不会发送这些头。
代码示例
' 判断请求是否来自Edge IE模式 Public Function IsEdgeIEMode(request As HttpRequest) As Boolean ' 优先检查X-MS-Edge-Mode专属头 If Not String.IsNullOrEmpty(request.Headers("X-MS-Edge-Mode")) Then Return request.Headers("X-MS-Edge-Mode").Equals("IE", StringComparison.OrdinalIgnoreCase) End If ' 备选:检查Sec-CH-UA头是否包含Edge标识 If Not String.IsNullOrEmpty(request.Headers("Sec-CH-UA")) Then Return request.Headers("Sec-CH-UA").Contains("Microsoft Edge") End If Return False End Function ' 判断请求是否来自纯IE浏览器 Public Function IsPureIE(request As HttpRequest) As Boolean ' 先排除Edge IE模式,再验证IE特征 If IsEdgeIEMode(request) Then Return False End If Dim userAgent = request.UserAgent Return request.Browser.Browser.Equals("IE", StringComparison.OrdinalIgnoreCase) OrElse Not String.IsNullOrEmpty(userAgent) AndAlso (userAgent.Contains("MSIE") OrElse userAgent.Contains("Trident/")) End Function
注意事项
X-MS-Edge-Mode是Edge IE模式的专属请求头,优先级最高;- 若用户手动修改请求头,该方法可能失效,但此类场景极少。
内容的提问来源于stack exchange,提问作者user20180413
相关产品推荐
相关产品推荐

