42

我知道您应该尽可能进行功能检测,但是如果浏览器是 Microsoft Edge 浏览器,您可以在 Javascript 中检测吗?

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

4

11 回答 11

57

尝试检测功能而不是特定浏览器。它更具前瞻性。您应该很少使用浏览器检测。

顺便说一句:一种选择是使用库(用户代理字符串有很多错综复杂的地方),或者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
于 2015-10-04T21:04:13.557 回答
28

这是检测 Edge 浏览器的简单脚本

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

解释:

/Edge/

用于搜索字符串 'Edge' 的正则表达式 - 然后我们针对 'navigator.userAgent' 属性进行测试

于 2017-10-25T05:01:09.883 回答
7
navigator.appVersion.indexOf('Edge') > -1
于 2015-12-07T20:35:38.403 回答
7

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

Edge的用户代理字符串:

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

Edge模式下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;平板电脑PC 2.0; rv: 11.0 ) 像 Gecko

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

于 2015-07-30T11:35:14.520 回答
4

你并不孤单。在写这篇文章的时候,即使是谷歌分析也不能专门识别 Edge 浏览器。

最好的办法是引用请求的用户代理,它会是这样的:

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

(要从 JavaScript 中的请求中提取用户代理,请参阅这篇文章:使用 JavaScript 获取用户代理

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

  • Windows NT 10.0- 它告诉您用户使用的是 Windows 10)
  • Edge - 告诉您用户在 Edge 上

当然,你也可以寻找Edge

更新 - 05/08

Google Analytics 现在已将 Windows 10 和 Edge 作为一级维度,现在可以直接过滤这些维度。

于 2015-08-05T06:21:57.777 回答
4

使用 javascript 进行浏览器检查

铬:window.navigator.userAgent.indexOf("Chrome") > -1;

伊斯:window.navigator.userAgent.indexOf("MSIE ") > -1 || !!navigator.userAgent.match(/Trident.*rv\:11\./);

边缘:window.navigator.userAgent.indexOf("Edge/") > -1;

是Safari:window.navigator.userAgent.indexOf("Safari") > -1 && window.navigator.userAgent.indexOf('Chrome') == -1;

火狐:window.navigator.userAgent.indexOf("Firefox") > -1;

IsChromiumEdge:window.navigator.userAgent.indexOf("Edg/") > -1; // for new edge chromium

于 2020-01-20T07:45:41.607 回答
2

我在这里的代码段也是从 SO 复制的,很抱歉我无法为您提供原始代码的参考,但我已经对其进行了修改,所以这里适合那些寻找代码段以检查 IE 11 和 MS 的人边缘窗口 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
    }
};
于 2016-07-12T08:27:45.470 回答
1

我觉得这是最好的方法,因为上面的方法有问题或不能正常工作。

if (/Edg/.test(navigator.userAgent)) {
  alert("You are using Edge.");
}

(function getBrowser() {
  //checks for individual browsers
  let chromeCheck =
    /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
  let firefoxCheck = /Firefox/.test(navigator.userAgent);
  let ieCheck = /Edg/.test(navigator.userAgent);

  //if/else to check browsers against defined variables
  if (chromeCheck && !ieCheck) {
    isBrowser.textContent = `Yes. It's Chrome!`;
  } else if (firefoxCheck) {
    isBrowser.textContent = `No. This is Firefox.`;
  } else if (ieCheck) {
    isBrowser.textContent = `No. It's Edge.`;
  } else {
    isBrowser.textContent = `We have no clue!`;
  }
})();
Is it Chrome or something else? <span id="isBrowser"></span><br>
(Open this link in Edge to verify)

于 2021-03-05T04:43:26.797 回答
0

Edge 版本 90 不显示edg/用户代理上的部分。但是它显示了窗户和野生动物园。现代 Safari 不能在 Windows 上运行,所以我做了这个验证,它检查用户代理上的 windows 和 safari,它可以工作

var isEdge = (function() {
  var agent = window.navigator.userAgent.toLowerCase();
  return agent.indexOf("windows") > -1 && agent.indexOf("safari") > -1
    ? true
    : false;
})();
于 2021-06-01T21:36:01.973 回答
0

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx

试一试:

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)
于 2015-07-30T10:31:12.850 回答
-4

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

所以从这个答案,https://stackoverflow.com/a/32107845/584147

简单地说,

  1. 这两种浏览器(IE 11 和 Edge)都使用“Netscape”的 navigator.appName(与使用“Microsoft Internet Explorer”作为 navigator.appName 的旧版 IE 相比)
  2. 在 IE 11 中,navigator.appVersion 说“三叉戟”,在 Edge 中,navigator.appVersion 没有说三叉戟

我已经把它变成了一个简单的 1 班轮,供任何最终来到这里并需要它的人使用。

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

alert(isieEdge);
于 2015-12-03T17:58:51.337 回答