如何使用javascript针对边缘浏览器

如何使用javascript针对边缘浏览器,javascript,browser-detection,microsoft-edge,Javascript,Browser Detection,Microsoft Edge,我知道你应该尽可能地进行功能检测,但是如果浏览器是Microsoft Edge浏览器,你能用Javascript进行检测吗 我维护一个旧产品,并希望显示一条警告,即某些功能可能会被破坏,而无需花费大量时间修复旧代码。 尝试一下: function getInternetExplorerVersion() // Returns the version of Internet Explorer or a -1 // (indicating the use of another browser). {

我知道你应该尽可能地进行功能检测,但是如果浏览器是Microsoft Edge浏览器,你能用Javascript进行检测吗

我维护一个旧产品,并希望显示一条警告,即某些功能可能会被破坏,而无需花费大量时间修复旧代码。

尝试一下:

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    if ( ver >= 8.0 ) 
      msg = "You're using a recent copy of Internet Explorer."
    else
      msg = "You should upgrade your copy of Internet Explorer.";
  }
  alert( msg );
}
将字符串
Microsoft Internet Explorer
替换为
Edge
或类似内容

编辑: 您可以了解用户代理字符串的含义:

alert(navigator.userAgent)

useragent字符串包含Edge/12.9600,其中12.9600是我测试的版本号。这与“边缘”模式下Internet Explorer的用户代理字符串完全不同

边缘的用户代理字符串:

Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/42.0.2311.135 Safari/537.36Edge/12.9600

边缘模式下IE10的用户代理字符串:

Mozilla/5.0(Windows NT 6.3;WOW64;Trident/7.0;.NET4.0E;.NET4.0C;InfoPath.3;.NET CLR 3.5.30729;.NET CLR 2.0.50727;.NET CLR 3.0.30729;Tablet PC 2.0;rv:11.0)和Gecko一样


因此,在使用javascript时,只需检查用户代理字符串中的单词“Edge”。当您还测试其他浏览器时,请确保先检查Edge,否则会出现误报(例如Chrome或Safari…)

您并不是唯一遇到此问题的人。在写这篇文章的时候,即使是Google Analytics也没有专门识别Edge浏览器

您最好的办法是引用请求的用户代理,如下所示:

Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML, 如壁虎)铬/42.0.2311.135狩猎/537.36边缘/12.9600

(要在JavaScript中从请求中提取用户代理,请参阅本文:)

Edge仅在Windows 10中可用,因此您可以使用此知识帮助确保逻辑安全。在UA中查找以下值:

  • Windows NT 10.0
    -它告诉您用户在Windows 10上)
  • Edge
    -它告诉您用户处于边缘状态
当然,您也可以只查找
Edge

更新-05/08 Google Analytics现在将Windows 10和Edge作为一级维度,现在可以直接对它们进行过滤。

尝试检测功能,而不是特定的浏览器。这更能证明未来。您很少应该使用浏览器检测

解决这个问题:一个选项是使用库(用户代理字符串有很多复杂的地方),或者手动解析
window.navigator.userAgent

使用解析器库

# https://github.com/faisalman/ua-parser-js.

var parser = new UAParser();
var result = parser.getResult();

var name = result.browser.name;
var version = result.browser.version;
使用Javascript的原始方法

# Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) \
# Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136

window.navigator.userAgent.indexOf("Edge") > -1

这里的每个人似乎都在说同样的话,除了没有人提供一个可靠的1线性解决方案

所以从这个答案来看,

就是说,

  • 这两种浏览器(IE 11&Edge)都使用“Netscape”的navigator.appName(与使用“Microsoft Internet Explorer”作为navigator.appName的旧版本IE相比)
  • 在IE 11中,navigator.appVersion表示“trident”,而在Edge中,navigator.appVersion不表示trident
  • 我已经把这变成了一个简单的1班轮为任何人谁结束在这里,并在需要它

    var isieEdge = (navigator.appName == "Netscape") && (navigator.appVersion.indexOf('Trident') === -1); // IE Edge
    
    alert(isieEdge);
    

    我这里的代码段也是从SO复制过来的,很抱歉,我无法为您提供原始代码的参考,但我已对其进行了修改,因此,这里是为那些寻找代码段以检查IE 11和MS Edge Window 10的人准备的:

    var get_ie_version = function () {
        var sAgent = window.navigator.userAgent;
        var Idx = sAgent.indexOf("MSIE");
    
        // If IE, return version number.
        if (Idx > 0) {
            return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));
        }
        // Condition Check IF IE 11 and or MS Edge
        else if ( !!navigator.userAgent.match(/Trident\/7\./)
            || window.navigator.userAgent.indexOf("Edge") > -1 )
        {
            return 11;
        } else {
            return 0; //It is not IE
        }
    };
    

    下面是检测边缘浏览器的简单脚本

    if (/Edge/.test(navigator.userAgent)) {
        alert('Hello Microsoft User!');
    }
    
    说明:

    /Edge/
    

    搜索字符串“Edge”的正则表达式,然后使用javascript对“navigator.userAgent”属性进行测试

    IsChrome:
    window.navigator.userAgent.indexOf(“Chrome”)>-1

    IsIE:
    window.navigator.userAgent.indexOf(“MSIE”)>-1 | |!!navigator.userAgent.match(/Trident.*rv \:11\。/)

    IsEdge:
    window.navigator.userAgent.indexOf(“Edge/”)>-1

    IsSafari:
    window.navigator.userAgent.indexOf(“Safari”)>-1&&window.navigator.userAgent.indexOf('Chrome')=-1

    iFirefox:
    window.navigator.userAgent.indexOf(“Firefox”)>-1


    IsChromiumEdge:
    window.navigator.userAgent.indexOf(“Edg/”)>-1;//对于新的edge chromium

    我觉得这是最好的方法,因为上面的方法有缺陷或者工作不正常

    if (/Edg/.test(navigator.userAgent)) {
      alert("You are using Edge.");
    }
    
    (函数getBrowser(){
    //检查各个浏览器
    让chromeCheck=
    /Chrome/.test(navigator.userAgent)和&/googleinc/.test(navigator.vendor);
    让firefoxCheck=/Firefox/.test(navigator.userAgent);
    让ieCheck=/Edg/.test(navigator.userAgent);
    //if/else根据定义的变量检查浏览器
    if(色度检查和ieCheck){
    isBrowser.textContent=`是的,它是Chrome!`;
    }否则如果(firefoxCheck){
    isBrowser.textContent=`不,这是Firefox。`;
    }else if(ieCheck){
    isBrowser.textContent=`不,它是Edge.`;
    }否则{
    isBrowser.textContent=`我们没有线索!`;
    }
    })();
    
    是Chrome还是别的什么

    (在Edge中打开此链接以验证)
    Edge版本90未显示useragent上的
    edg/
    部件。不过,它显示的是windows和safari。现代Safari不在Windows上运行,所以我做了这个验证,在用户代理上检查Windows和Safari,它可以工作

    var isEdge = (function() {
      var agent = window.navigator.userAgent.toLowerCase();
      return agent.indexOf("windows") > -1 && agent.indexOf("safari") > -1
        ? true
        : false;
    })();
    

    您关心边缘支持的哪些功能?您可以使用用户代理嗅探,但单独的浏览器检测是不好的做法。相反,检测功能。如前所述,代理嗅探是一个坏主意。可能重复()应该注意,全新的边缘已更改其用户代理,以反映它是
    var isEdge = (function() {
      var agent = window.navigator.userAgent.toLowerCase();
      return agent.indexOf("windows") > -1 && agent.indexOf("safari") > -1
        ? true
        : false;
    })();