如何使用javascript针对边缘浏览器
我知道你应该尽可能地进行功能检测,但是如果浏览器是Microsoft Edge浏览器,你能用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). {
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 10上)Windows NT 10.0
-它告诉您用户处于边缘状态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线性解决方案 所以从这个答案来看, 就是说,
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;
})();