我知道您应该尽可能进行功能检测,但是如果浏览器是 Microsoft Edge 浏览器,您可以在 Javascript 中检测吗?
我维护一个旧产品,我想显示一个警告,表明某些功能可能会被破坏,而无需花费大量时间修复旧代码。
我知道您应该尽可能进行功能检测,但是如果浏览器是 Microsoft Edge 浏览器,您可以在 Javascript 中检测吗?
我维护一个旧产品,我想显示一个警告,表明某些功能可能会被破坏,而无需花费大量时间修复旧代码。
尝试检测功能而不是特定浏览器。它更具前瞻性。您应该很少使用浏览器检测。
顺便说一句:一种选择是使用库(用户代理字符串有很多错综复杂的地方),或者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
这是检测 Edge 浏览器的简单脚本
if (/Edge/.test(navigator.userAgent)) {
alert('Hello Microsoft User!');
}
解释:
/Edge/
用于搜索字符串 'Edge' 的正则表达式 - 然后我们针对 'navigator.userAgent' 属性进行测试
navigator.appVersion.indexOf('Edge') > -1
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...)
你并不孤单。在写这篇文章的时候,即使是谷歌分析也不能专门识别 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
。
Google Analytics 现在已将 Windows 10 和 Edge 作为一级维度,现在可以直接过滤这些维度。
使用 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
我在这里的代码段也是从 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
}
};
我觉得这是最好的方法,因为上面的方法有问题或不能正常工作。
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)
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;
})();
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)
每个人似乎都在这里说同样的话,除了没有人提供可靠的 1 班轮解决方案。
所以从这个答案,https://stackoverflow.com/a/32107845/584147
简单地说,
我已经把它变成了一个简单的 1 班轮,供任何最终来到这里并需要它的人使用。
var isieEdge = (navigator.appName == "Netscape") && (navigator.appVersion.indexOf('Trident') === -1); // IE Edge
alert(isieEdge);